现在有两台 Linux 服务器,A(用户名a) 和 B(用户名b),现在我们想从 A 服务器通过 SSH 访问服务器 B 而无需输入密码。

首先,A 和 B 上都需安装有 SSH,用以下命令安装

sudo yum install openssh

同时修改两台服务器上的文件 /etc/ssh/sshd_config,将下面这三行取消注释:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

更改配置文件后重启 SSH 服务

service sshd restart

在服务器 A 上用 RSA 算法生成公钥和私钥,并且将 A 的公钥拷贝到 B 中,设置文件和文件夹适当的权限即可,具体过程如下。

[a@A ~]$ ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa):      
    #此处不用输入,直接回车即可
Created directory '/home/a/.ssh'.
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.

如果 b@B 的 ~ 文件夹下无 .ssh 文件夹则建一个,否则跳过此步。

[a@A ~]$ ssh b@B mkdir -p .ssh
b@B's password:

将 A 的公钥拷入 B 中。

[a@A ~]$ cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password:

设置文件夹和文件权限。

[b@B ~]$ chmod 700 ~/.ssh
[b@B ~]$ chmod 600 ~/.ssh/authorized_keys

P.S. 服务器  B 需要有本地回环接口,也即是正确配置了 /etc/sysconfig/network-scripts/ifcfg-lo 文件,可以参考这里

最后讲一下这种访问的原理。

RSA 密码体制是一种非对称密码体制,也就是说它的密码有两个,一个公开的称为公钥,另一个不公开的称为私钥,它假设人们一般无法根据公钥推算出私钥(这个由数学计算上的难度来保证)。假设 B 想通过网络发条消息 x 给 A,并且不想让让别人知道这个消息的内容,这时,B 应该在本地上用 A 的公开的公钥加密消息 x 得到 y,然后通过网络将加密后的消息 y 发送给 A,然后 A 在本地用自己的私钥将消息 y 解密得到原消息 x。假设有个第三者 C,它截获了在网络上传输的消息 y,并且 C 也轻易地知道了 A 的公钥(因为这个公钥是相对公开的),但是 C 仍然无法知道这条消息的原文是什么,因为 C 并没有 A 的私钥无法解密消息。

现在回到最开始的两台服务器 A 与 B 的情形,我们想让 A 可以无需输入密码就可以登陆到 B 上。其实我们要做的就是让服务器 B 接受到登陆请求时确认发起请求的是服务器 A 即可,所以大致流程如下:

  • 服务器 B 接受到一个自称是服务器 A 的登陆请求;
  • B 在本地生成一个随机数 r,并且用 A 的公钥进行加密,得到 rc
  • B 将 rc 传回给请求登陆的服务器,并要求该服务器解密;

之后分为两种情况

  1. 若 B 收到请求登陆服务器传回的数值,并且等于 r,则认可该服务器的身份是 A,并允许其登陆;
  2. 若 B 在一定时间内都未收到回复,或者收到的数值不正确,都视为无法确认请求服务器的身份,并拒绝其登陆。

参考文章:SSH login without password

R语言的命名相对松散,没有一致的命名规范,下面是几种在R中常见的命名规范。

  • 全小写(alllowercase):所有字母都采用小写的格式,并且单词之间不用分隔符。如 searchpaths, srcfilecopy。这种命名方式在 MATLAB 中较为常见;
  • 点号分隔(period.separated):所有字母用小写,并且单词之间用英文句号分隔。这种命名方式是R所独有的,并且在核心函数上可见,如 as.numeric, read.table;
  • 下划线分隔(underscore_separated):所有字母小写,并且单词之间用下划线分隔。如 seq_along, package_version。这种命名方式多见于 C++, Perl 和 Ruby;
  • 小驼峰法(lowerCamelCase):如 colMeans, suppressPackageStartupMessage。这种命名法多见于Java, JavaScript;
  • 大驼峰法(UpperCamelCase):如Vectorize, NextMethod。这种命名法多见于Java, Python 和 JavaScript。

还要注意的一点是,在 R 中,以点(dot)开头的对象在某种程度上说是隐藏的,这个性质与 Linux 的文件系统中的情况是类似的。

这里找到了有四种现成的编码规范说明:

还是那句话,不管遵循哪种规范,请保持代码规范一致。

想知道哪种命名规范在 R 里比较流行吗?从 CRAN (Comprehensive R Archive Network)中的2668个包中抓出62497个函数名和316852个参数名,得到如下的比例图(注意有些名字的命名无法被唯一的归为一种命名法,比如plot就同时归到alllowercase, period.separated, underscor_separated, lowerCamelCase 下)。

NamingConventionPercentage

 

 

 

 

 

 

 

文章来源:《The State of Naming Conventions in R》

登录

RStudio Server是通过浏览器与服务器交流的IDE,使用网址 http://<server-id>:8787 登陆,登陆使用的是服务器的账号和密码, 要注意的是 RStudio 不允许使用系统用户登陆,即 UID 小于100的用户是无法通过 RStudio登陆的,所以root用户是无法登陆的。

见文:RStudio Server: Getting Started

配置

RStudio 有如下两个配置文件,这两个文件是当用户需要更改配置时自己生成的。

  • /etc/rstudio/rserver.conf
  • /etc/rstudio/rsession.conf

更改配置后可以用如下命令测试配置是否成功:

sudo rstudio-server test-config

配置成功后,需要重启RStudio Server服务来使之生效

sudo rstudio-server restart

几个可能会用到的配置:

rserver.conf
-- 更改RStudio Server的登陆连接端口为8089
www-port=8089
rsession.conf
-- 更改一个Session的超时时长为25分钟(默认这个时间是2个小时, 当用户长达2个小时内没有输入命令后,RStudio会挂起这个session, 将内容保存到硬盘上,在该用户下次登陆时再从硬盘恢复。), 把这个值设置成0就意味不设置超时时间。
session-timeout-minutes=25

见文:RStudio Server: Configuring the Server

操作

对 RStudio Server 的操作都是通过 rstudio-server 这个工具来实现的,默认安装在 /usr/sbin 下。

安装 RStudio 后,它会自动在文件夹/etc/init.d下生成 rsudio-server.conf 文件 来实现 rsudio-server 进程的自动启动。手动操作的命令如下:

	sudo rstudio-server stop
	sudo rstudio-server start
	sudo rstudio-server restart

操作Session的命令如下:

列出当前所有的活跃Session
sudo rstudio-server active-sessions
挂起某个Session
sudo rstudio-server suspend-session
强制挂起某个Session
sudo rstudio-server force-suspend-session
挂起所有Session
sudo rstudio-server suspend-all
强制挂起所有Session
sudo rstudio-server force-suspend-all

当系统需要维护时,可以通过如下命令通知在线用户

sudo rstudio-server offline

重新上线:

sudo rstudio-server online

见文:RStudio Server: Managing the Server