设置 SSH 自动登陆多个不同的主机
在《使用 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”。差不多就是这样了~ ![]()