使用证书实现 SSH 免密码快速登录
使用证书代替密码登录 SSH 应该已经是家常便饭,是最基本的安全保护措施之一。这里简单记录一下,主要是为了实现 VS Code 的 Remote-SSH 可以免密码打开远程代码。
创建证书
证书无所谓在哪里哪里,客户端 服务端 第三者 都可以,重点是要有 ssh-keygen
。
- 首先执行
ssh-keygen
开始生成证书; - 提示
Enter file in which to save the key:
输入证书的保存文件名; - 提示
Enter passphrase (empty for no passphrase):
输入证书密码; - 提示
Enter same passphrase again:
同上;
这里的密码不是 SSH 的密码,而是每次使用证书时需要输入的密码。可以直接回车生成无密码证书,但有些安全性要求较高的平台是不接受无密码的证书的(好像 GitHub 就不接受)。
完成后会发现有两个文件,例如 vscode
和 vscode.pub
,它们分别是证书的私钥 Private Key 和公钥 Public Key,区别和作用这里就不废话了,网上很多。
服务器添加证书
有了证书,我们需要把 Public Key 添加到登录的目标服务器的 ~/.ssh/authorized_keys
中,服务器才知道我们要凭这对证书进行登录。
- 先确定有没有
.ssh
目录,如果没有就先mkdir ~/.ssh
创建; - 执行
cat vscode.pub >> ~/.ssh/authorized_keys
添加证书,注意是带 .pub 的文件; - 执行
chmod 700 ~/.ssh
和chmod 600 ~/.ssh/authorized_keys
修改权限;
PS. 修改权限并非必须,也不是每次都要做,但执行一下可以减少一些疑难杂症。
客户端使用证书登录
现在我们可以在客户端先用 ssh -i <private_key> <host>
试一下能否登录。如果没问题,则把 Private Key 也拷贝到客户端的 ~/.ssh
目录中;如果是 Windows 则拷贝到 %USERPROFILE%\.ssh
目录。
然后编辑 .ssh
目录中的 config
文件,如果没有则创建一个,按以下格式添加:
Host <主机名>
HostName <主机的 IP 地址或域名>
User <用户名>
IdentityFile <私钥存的路径>
现在,无论是在 terminal 中使用 ssh <主机名>
登录服务器,还是在 VS Code 中打开远程代码,都不再需要输入密码咯,搬砖效率大大提升~