前言
通常在 Shell 中使用 SSH 连接远程服务器时,我们需要输入完整的 SSH 命令,如:
$ ssh [email protected] #连接远端22端口并输入密码登陆
然后根据提示输入 user
用户的密码登陆主机。
有两个常用的参数:
-p
指定其他 SSH 端口,如 SSH 端口非 22 端口,可用此参数指定-i
指定私钥通过密钥登陆,可配置好密钥后对免密登陆
## 连接远端1234端口
$ ssh [email protected] -p 1234
## 使用私钥id_rsa登陆
$ ssh [email protected] -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 [email protected]
后就可以自动免密登陆主机 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 [email protected]"
alias myserver1234="ssh [email protected] -p 1234"
alias myserver="ssh [email protected] -i ~/.ssh/id_rsa"
需要 SSH 连接主机 localhost.test:1234
的时候执行命令 $ myserver1234
即可。
真是好方便呢!