设置 SSH 自动登陆多个不同的主机

Feb 12th, 2010 | Filed under Ubuntu

在《使用 Putty 自动登陆远程 Linux 主机》一文中曾经讲过如何设置 SSH (客户端为 Putty) 来自动登陆 Linux 主机。当需要自动登陆的主机有多台的时候,上文的方法就有点不适合了。这里补全一下,如何搞定多台服务器的 SSH 自动登录。

假设有两台远端 Linux 服务器,host-jack 和 host-vicki。

1. 分别为两台服务器生成密钥对
你可以在任何一台 Linux 服务器上面运行 ssh-keygen 程序来生成密钥对。我这里使用的是本机系统的 Cygwin 环境。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/verdana/.ssh/id_rsa): /home/verdana/.ssh/id_rsa_jack
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/verdana/.ssh/id_rsa_jack.
Your public key has been saved in /home/verdana/.ssh/id_rsa_jack.pub.
The key fingerprint is:
84:bb:e0:a1:be:75:2b:49:15:09:bd:01:39:ce:7b:e1 verdana@verdana-pc
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/verdana/.ssh/id_rsa): /home/verdana/.ssh/id_rsa_vicki
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/verdana/.ssh/id_rsa_vicki.
Your public key has been saved in /home/verdana/.ssh/id_rsa_vicki.pub.
The key fingerprint is:
ea:74:e3:1d:c4:5e:c8:ee:54:f9:ac:f0:55:60:d1:62 verdana@verdana-pc

2. 将公钥上传至远程服务器
使用 scp,ftp/sftp … 或者您喜欢的方式将生成的公钥(*.pub)上传到远程服务器需要自动登陆的账户主目录的 .ssh 目录中,并导入至 authorized_keys 文件中。下面以 host-jack 的 root 账户为例:

$ scp /home/verdana/.ssh/id_rsa_jack root@host-jack:~/.ssh

如果 .ssh 目录不存在,或者 authorized_keys 文件不存在,请自行 ssh 至对应主机创建目录和文件,或者使用 ssh 的远程命令功能创建,如果已经存在,则跳过这个步骤。示例:

$ ssh root@host-jack 'mkdir ~/.ssh; touch ~/.ssh/authorized_keys'
root@host-jack's password:

导入至 authorized_keys 文件。

$ ssh root@host-jack 'cat ~/.ssh/id_rsa_jack.pub >> ~/.ssh/authorized_keys'
root@host-jack's password:

完成后,id_ras_jack.pub 这个文件就不需要了,可以删除或保留。

3. 设置客户端
本地我使用的是 Cygwin,刚刚生成的私钥 id_rsa_jack 和 id_rsa_vicki 已保存在了 /home/verdana/.ssh 目录中。此时你便可以使用下面的命令来自动登陆远程主机了。

$ ssh -i ~/.ssh/id_rsa_jack root@host-jack
$ ssh -i ~/.ssh/id_rsa_vicki root@host-vicki

使用 ssh -i 来指定认证的私钥文件。是不是命令很长?当然了,这么长的命令,自动登陆变得没有意义了。
你可以修改 .bashrc 文件,使用 alias 为上面的命令指定一个别名命令。

1
alias ssh-jack 'ssh -i ~/.ssh/id_rsa_jack root@host-jack'

或者配置 ssh_config 为每台远程主机分别指定不同的认证文件。创建文件 /home/verdana/.ssh/config,内容如下:

1
2
3
4
5
Host host-jack
IdentityFile ~/.ssh/id_rsa_jack
 
Host host-vicki
IdentityFile ~/.ssh/id_rsa_vicki

其它 ssh_config 的配置命令,请参考 “man ssh_config”。差不多就是这样了~ :)

Comments are closed.