OpenSSH有两种认证方式:基于口令认证和基于密钥认证。
基于口令的认证相对简单,仅需在SSH客户端登录时输入密码即可。在某些场景,比如登录公司服务器,一般需要我们通过每人的密钥登录。
本文基于我经常使用的SecureCRT和WindTerm两个SSH客户端工具,分别介绍如何使用密钥登录。
0x01 基于SecureCRT软件
使用密钥登录系统一般有如下几步:
第一步,制作SSH2公私钥对;
第二步,将公钥放置到服务器的对应账号、对应目录、对应文件中(该文件一般为 /home/{user}/.ssh/authorized_keys);
第三步,配置OpenSSH服务端配置文件,允许通过密钥登录;
第四步,在SecureCRT软件中配置密钥登录,引用正确的私钥;
第一步,使用SecureCRT软件制作SSH2公私钥对。
制作SSH2公私钥对的方法有很多种,比如PuTTYgen、ssh-keygen等,本文我们直接使用SecureCRT来生成密钥。
- 通过菜单栏“工具”选项,然后点击“创建公钥”,如下图所示:
- 系统弹出如下界面,然后直接选择下一页:
- 在密钥类型处,我们选择Ed25519(通常来讲RSA算法用的最为广泛,但该算法的安全性已不能满足现代要求,所以在新版OpenSSH中已默认不再使用,如果确实需要使用RSA,后文有介绍使用方法)。如下图所示:
- 如下界面是填写保护私钥的密码,在设置了保护密码的情况下,如果私钥丢失,其他人在使用该私钥时,需要输入对应密码才能启用。所以设置保护密码,有助于增强系统的安全性,建议设置。此处为了演示方便,不做设置,直接点击下一页,进入后续步骤:
- 如下界面是选择密钥长度,对于Ed25519算法来讲,密钥长度固定为256,无需配置,直接点击下一页,进入后续步骤:
- 如下界面是密钥生成过程,待密钥生成完毕后,直接点击下一页,进入后续步骤:
- 如下界面是选择密钥格式以及存储目录,此处我们使用 OpenSSH密钥格式(新)。至于私钥存储目录和文件名可以自定义,但一般建议按下图的存储示例存储。配置完毕后,点击完成。
第二步,将公钥放置到对应的目录和文件中。
假如,我们将以用户名XXX登录系统,那么该公钥应当放入 /home/XXXX/.ssh/authorized_keys 文件中。
本文,演示时我们使用mancode账号登录。首先将上文生成的Identity.pub公钥文件,通过WinSCP或者lrzsz工具上传到/home/mancode/.ssh目录内,然后使用如下命令,将公钥追加到authorized_keys文件中。
1 | echo "" | cat - Identity.pub >> authorized_keys |
命令执行过程如下图所示:
第三步,配置OpenSSH服务端的配置文件,允许通过密钥登录。
本步骤,我们需要修改/etc/ssh/sshd_config配置文件,正确设置PubkeyAuthentication和AuthorizedKeysFile配置项。
原配置如下所示:
新配置如下所示:
配置文件修改后,重启服务器或者使用如下命令重启OpenSSH服务端:
1 | sudo systemctl restart ssh |
第四步,在SecureCRT软件中配置密钥登录,引用正确的私钥;
- 创建快速连接,如下图所示:
- 在PublicKey的属性页中,首先选择“使用会话公钥设置”,然后点击“身份或证书文件”浏览按钮,找到我们上文生成的私钥。然后点击确定。
- 执行上步之后,回到下面的界面,此时我们点击“连接”。
点击连接之后,我们即可看到无需输入密码,就能成功登录系统。
0x02 参考资料
https://www.vandyke.com/support/tips/agent_forwarding.html
https://blog.csdn.net/m0_56305656/article/details/120479116
https://shuyeidc.com/wp/190492.html
https://unix.stackexchange.com/questions/721606/ssh-server-gives-userauth-pubkey-key-type-ssh-rsa-not-in-pubkeyacceptedalgorit
https://www.cnblogs.com/guangdelw/p/18104346
https://blog.csdn.net/qq_43024789/article/details/139317891