0%

ssh使用自定义证书免密登录

N1 系统安装完成后,为了使外网登录更加安全,本篇将介绍如何把 ssh 密码 登录方式改为 ssh 证书 免密登录。

证书登录实现步骤

  1. 生成证书:私钥和公钥,私钥存放在客户端,必要时可为私钥加密;
  2. 服务器添加信任公钥:把生成的公钥,上传到ssh服务器,添加到指定的文件中(默认是:.ssh/authorized_keys 文件);
  3. 配置开启允许证书登录,客户端就能通过私钥ssh登录服务器了。

具体实现

生成私钥和公钥
1
ssh-keygen -t rsa -b 4096 -f ~/.ssh/n1_ca -C n1_ca

执行过程中会提示输入两次密码,当然如果不想在使用公钥的时候输入密码,直接回车即可。

  • -t rsa:指定密钥算法 RSA。
  • -b 4096:指定密钥的位数是4096位。安全性要求不高的场合,这个值可以小一点,但是不应小于1024。
  • -f ~/.ssh/n1_ca:指定生成密钥的位置和文件名。
  • -C n1_ca:指定密钥的识别字符串,相当于注释,可以随意设置。
将公钥拷贝到服务器上
1
ssh-copy-id -i ~/.ssh/n1_ca.pub root@192.168.50.3

登录服务器,确认公钥已配置正确。

1
cat ~/.ssh/authorized_keys
服务端配置:sshd_config
1
vim /etc/ssh/sshd_config
1
2
3
4
5
6
7
# 允许 root 账户登录,默认:yes。
# 若为了更安全考虑,建议设置成 no。但记得在使配置生效前,确保有其他账号可以通过证书登录。
PermitRootLogin yes
# 设置公钥文件 - 保持默认配置即可
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
# 禁止密码登录方式
PasswordAuthentication no

完成配置后,需要重启 sshd 服务使配置生效。

1
$ systemctl restart sshd

注意:服务端 sshd 服务重启后不要立刻结束当前终端,新建一个终端测试登录,在登录成功且没有问题,后再结束当前终端,以避免配置错误导致无法登录服务器。

测试通过证书登录服务器
1
ssh -i ~/.ssh/n1_ca root@192.168.50.3

通过指定证书文件免密登录服务器,但这样每次登录都需要指定证书文件,可通过客户端配置 ssh_config 文件,追加私钥证书文件,免去每次登录时需指定证书文件的麻烦。

1
2
3
4
5
6
sudo vim /etc/ssh/ssh_config

# 若有多个私钥文件,可追加。
IdentityFile ~/.ssh/n1_ca
# virtualbox 私钥文件
IdentityFile ~/.ssh/virtualbox_ca

保存,今后就可以直接通过 ssh root@192.168.50.3 命令登入 N1 系统啦。

默认:ssh 命令使用的密钥文件是 ~/.ssh/id_rsa