# ssh - 免密登录及设置多个key

# 遇到问题

在连接到远程服务器的时候,由于一般都是用终端进行连接的,经常需要输入密码,每次输入密码都得找一下。在使用 SSH 协议登录远程服务器时,默认要输入密码进行验证。而通过配置免密登录,就可以省去输入密码的步骤,直接登录了。

# 解决方法

# 免密登录配置

免密码登录基于非对称密码,即加密和解密使用不同的密钥,一个是公钥,另一个是私钥。

首先用公钥算法 RSA 生成一对密钥:

ssh-keygen -t rsa
1

根据提示三次默认回车,就会在 $HOME/.ssh 目录下,会新生成两个文件 id_rsaid_rsa.pub 。其中 id_rsa 是私钥,而 id_rsa.pub 是公钥。由于要设置多个 ssh key ,因此在第一个提示所要保存的路径时,可以将密钥名字改为 xxx_rsa

插图

然后通过 scpxxx_rsa.pub 上传到远程主机 $HOME/.ssh 目录下(如果没有,则新建一个):

scp xxx_rsa.pub <remote user>@<remote machine>:~/.ssh
1

然后在远程主机里将公钥复制到 authorized_keys 文件里,并赋予相关的权限:

chmod 700 ~/.ssh/
cd ~/.ssh/
touch authorized_keys
cat xxx_rsa.pub > authorized_keys
chmod 600 authorized_keys
1
2
3
4
5

在远程主机的配置文件 /etc/ssh/sshd_config 里,将 PubkeyAuthentication yesRSAAuthentication yes 的注释去掉,然后重启远程主机的 SSH 服务(centos 7):

systemctl restart sshd.service
1

接下来就可以免密码登录了。

ssh -p port user@hostname
1

# 设置多个 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    # 关闭提示
1
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 就可以了。

# 单独应用某个配置

  1. 添加到ssh-agent。首先确定ssh-agent is enabled:
# start the ssh-agent in the background
$ eval "$(ssh-agent -s)"
# Agent pid 59566
1
2
3
  1. 添加
$ ssh-add ~/.ssh/id_ecdsa
1

说明 id_ecdsa是私钥,id_ecdsa.pub是公钥。私钥是不能外泄的,我们需要用到的是公钥

# 参考

上次更新: 4/23/2021, 9:43:10 AM