# ssh - 免密登录及设置多个key
# 遇到问题
在连接到远程服务器的时候,由于一般都是用终端进行连接的,经常需要输入密码,每次输入密码都得找一下。在使用 SSH 协议登录远程服务器时,默认要输入密码进行验证。而通过配置免密登录,就可以省去输入密码的步骤,直接登录了。
# 解决方法
# 免密登录配置
免密码登录基于非对称密码,即加密和解密使用不同的密钥,一个是公钥,另一个是私钥。
首先用公钥算法 RSA 生成一对密钥:
ssh-keygen -t rsa
根据提示三次默认回车,就会在 $HOME/.ssh 目录下,会新生成两个文件 id_rsa
和 id_rsa.pub
。其中 id_rsa
是私钥,而 id_rsa.pub
是公钥。由于要设置多个 ssh key ,因此在第一个提示
所要保存的路径时,可以将密钥名字改为 xxx_rsa
。
插图
然后通过 scp
将 xxx_rsa.pub
上传到远程主机 $HOME/.ssh
目录下(如果没有,则新建一个):
scp xxx_rsa.pub <remote user>@<remote machine>:~/.ssh
然后在远程主机里将公钥复制到 authorized_keys
文件里,并赋予相关的权限:
chmod 700 ~/.ssh/
cd ~/.ssh/
touch authorized_keys
cat xxx_rsa.pub > authorized_keys
chmod 600 authorized_keys
2
3
4
5
在远程主机的配置文件 /etc/ssh/sshd_config
里,将 PubkeyAuthentication yes
和 RSAAuthentication yes
的注释去掉,然后重启远程主机的 SSH 服务(centos 7):
systemctl restart sshd.service
接下来就可以免密码登录了。
ssh -p port user@hostname
# 设置多个 ssh key
在设置完免密登录后,可以不用敲密码了。但是要登录不同的远程主机时,每个帐号参数配置可能不同,比如端口设置不同,这时候敲命令就很劳神费力了。SSH 提供了配置文件用来管理用户的 SSH 会话,该机制可以大大的方便用户登录。
SSH 的配置文件有两个:
$ ~/.ssh/config # 用户配置文件
$ /etc/ssh/ssh_config # 系统配置文件
在 ~/.ssh/
新建 config 文件,其配置如下:
Host alias # 关键词
HostName hostname # 主机地址
Port port # 指定端口
User root # 用户名
IdentityFile ~/.ssh/xxx_rsa # 认证文件
StrictHostKeyChecking no # 关闭提示
2
3
4
5
6
若要设置多个 ssh key ,只需要在 config 文件中添加多个 HOST 即可。
在 .ssh/
目录下,还有一个文件是 known_hosts
,该文件是已知的主机公钥名单。
在第一次连接远程主机时,OpenSSH 会提示: 无法辨认主机的真实性,询问是否要继续连接
。手动输入 yes 之后 ssh 就会将远程主机地址及对应的公钥添加进 known_hosts 文件。下一次连接同一台远程主机时,OpenSSH 通过 known_hosts 文件识别出它的公钥已经保存在本地了,从而跳过提示。
将 StrictHostKeyChecking
设置成 no 后,在第一次连接时,ssh 将会自动添加远程主机的相关信息,省略了手动敲 yes 的步骤。
最后在终端执行命令 ssh alias
就可以了。
# 单独应用某个配置
- 添加到ssh-agent。首先确定ssh-agent is enabled:
# start the ssh-agent in the background
$ eval "$(ssh-agent -s)"
# Agent pid 59566
2
3
- 添加
$ ssh-add ~/.ssh/id_ecdsa
说明 id_ecdsa是私钥,id_ecdsa.pub是公钥。私钥是不能外泄的,我们需要用到的是公钥