SSH配置登陆密钥和别名

前言

通常在 Shell 中使用 SSH 连接远程服务器时,我们需要输入完整的 SSH 命令,如:

$ ssh user@example.com			#连接远端22端口并输入密码登陆

然后根据提示输入 user 用户的密码登陆主机。

有两个常用的参数:

  • -p 指定其他 SSH 端口,如 SSH 端口非 22 端口,可用此参数指定
  • -i 指定私钥通过密钥登陆,可配置好密钥后对免密登陆
# 连接远端1234端口
$ ssh user@example.com -p 1234

# 使用私钥id_rsa登陆
$ ssh user@example.com -i ~/.ssh/id_rsa

但是随着手头服务器配置的增加,而不同服务器 IP、端口、用户、使用的密钥均不同,每次繁琐地查询和输入这么多配置和参数实在是麻烦,何况我怎么记得住这么多 IP 地址啊!(主要还是因为懒

配置密钥登陆

通过修改 SSH 的配置文件,为服务器预先配置好各主机的私钥和别名,之后就可以方便快捷地登陆服务器。

修改 ~/.ssh/config 文件,格式如下:

Host *
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa

上例配置 SSH 默认使用私钥 ~/.ssh/id_rsa 进行连接。如果远端服务器已经事先将 ~/.ssh/id_rsa.pub 添加到对应用户的 ~/.ssh/authorized_keys 文件中,那么在本地执行命令 $ ssh user@example.com 后就可以自动免密登陆主机 example.com

配置主机别名

对于个别不同的服务器配置,我们可以继续在 ~/.ssh/config 文件中添加配置:

Host test
Hostname localhost.test
Port 1234
IdentityFile ~/.ssh/test_rsa
User ubuntu

上例配置主机 localhost.test:1234 使用用户 ubuntu 和私钥 ~/.ssh/test_rsa 进行连接。如果不配置 IdentityFile 则会提示输入密码才能登陆。

可以看到上述配置的 Host 项即为 SSH 连接的别名。该例中 Host 值为 test,那么我们在需要 SSH 连接主机 localhost.test:1234 的时候就可以直接执行命令立即免密登陆远端主机:

ssh test

命令别名

如果不想这么麻烦,也可以通过设置命令别名来达到目的

修改 ~/.bash_profile 文件,并根据服务器配置添加不同的命令别名:

alias myserver="ssh user@example.com"
alias myserver1234="ssh user@localhost.test -p 1234"
alias myserver="ssh user@remote.test -i ~/.ssh/id_rsa"

需要 SSH 连接主机 localhost.test:1234 的时候执行命令 $ myserver1234 即可。

真是好方便呢!