SSH不输入密码连接远程Linux主机
机 理:公/私密钥验证。公钥(public key)用于加密,私钥(private key)用于对使用其匹配的公钥加密的数据进行解密。在本地机器生成一个密钥对,把公钥放到远程主机,然后从本地机器发起ssh连接,远程主机的sshd 产生一个随机数并用此公钥进行加密后发给本地机器,本地机器使用私钥进行解密并将结果发回,远程主机验证结果无误后准予登陆。
步骤:
注:密钥需要与远程Linux主机上的SSH系统相匹配。openSSH是Linux上默认的SSH系统,因此这里的内容只适用于openSSH。
1. 生成密钥对。
(1)Linux
$ ssh-keygen -t rsa
这 个命令生成一个密钥对:id_rsa和id_rsa.pub。他们默认被保存在~/.ssh/目录下。可以将id_rsa.pub改名为 local_rsa.pub以免与远程主机上的id_rsa.pub重名。在生成过程中会要求输入pass phrase,这个是用来保护私钥的使用的,即每次你使用私钥的时候需要先输入这个密码,因此这里不要输入任何字符,直接回车。
(2)Windows + putty
需 要用putty-gen.exe来生成密钥。运行putty-gen.exe后,点击“Generate”按钮生成密钥,点击“Save private key”保存putty可以使用的密钥,如test.ppk。pass phrase的部分同前。在“Public key for passing into openSSH authorized_keys file”一行下面的文本框中就是公钥的内容,将该内容拷贝到一个空白的文本文件,保存文件,如test.pub。
2. 上传公钥。
将生成的公钥,如test.pub,上传到远程主机的~/.ssh目录下,将test.pub的内容附加到authorized_keys文件末尾。
3. 远程主机SSH的设置
authorized_keys必须只有所有者才能访问:
$ chmod go-rwx ~/.ssh/authorized_keys
另外,为了不在每次发起连接时输入pass phrase:
$ ssh-agent $SHELL
$ ssh-add
(注:这个是参照MPICH的SSH设置,我还不确定如果不使用MPICH的话这个是不是必需的。)
4. 连接
(1)Linux
在Linux终端下,直接输入ssh remote_machine_name然后即可发起ssh连接,远程系统将进行公钥认证。
(2)Windows + putty
在session的auth选项中,选择前面步骤中生成的私钥文件,然后点击“open”。在要求输入用户名时,输入用户名。
常见应用举例:
1。 在A上以用户rootSSH到B上作为普通用户user而不是root,因为为了安全,有时不需要作为root,只需要作为普通用户不需要密码以完成相应工作即可。
登录作为root在A上
A# scp /root/.ssh/identity.pub href="mailto:user@B:/home/user/.ssh/authorized_keys">user@B:/home/user/.ssh/authorized_keys
2. tar一批文件从A到B。
A# tar cvf - /etc | ( ssh B tar xvf -)
3. 运行A上的cronjob,对某文件作改动后传到B
0 1 * * * cat /etc/shadow | awk -F: '{print $1":"$2}' | (ssh B 'cat >/home/passwd')
常见问题:
1。 这种方式的SSH需要B上的sshd_config中允许直接的root login (PermitRootLoginyes).
2. 我有服务器A和其它服务器B,C,D。我想从ASSH到这些服务器但不要自动,最好输入RSA passphase,但太麻烦,怎么办?
a. 要A上运行ssh-keygen时输入passphase字。
b. 要登录到A上后运行A#ssh-agent bash
c. 再运行ssh-add加passphase进入内存
d. 再运行ssh B or SSH C or SSH D,则不再需要密码,密码对只需输一次
e. 最后退出shell前输入ssh-agent -k 。
阅读(1110) | 评论(0) | 转发(0) |