平时用 SSH 连树莓派和虚拟机每次都要输入密码,比较烦人。Windows Terminal 出于安全原因是不支持记录密码进行自动连接的功能的,所以还是老老实实创建 RSA 密钥进行连接好了。
生成 RSA 密钥对
Windows 上可以用 Putty Key Generator 这个工具生成 RSA 密钥对:
点击菜单 key->Generate key pair。
在打开的页面点击 Generate 按钮生成密钥对,等待一会后就可以生成一对 RSA 密钥。
RSA 密钥对本质上是两个用 RSA 算法生成的字符串,将对应的字符串保存起来就是密钥文件,可以用于身份验证。
理论上只要保存私钥(private key)就可以了,因为私钥是可以生成公钥的。但方便起见我们最好还是将私钥和公钥都保存起来。
点击 Save public key 将公钥保存到本地文件,可以用 .pub 作为文件后缀以表示这是 RSA 公钥。
点击 Save private key 将私钥保存到本地文件,文件以 .ppk 作为后缀进行保存。
保存私钥的时候会提示是否在没有设置密码的情况下保存,如果是用途比较敏感的私钥,可以额外添加密码来保护私钥,这样可以防止私钥丢失后被人恶意利用。
部分程序(比如 Windows Terminal)进行身份验证时使用的是 pem 私钥而非 ppk 私钥,所以最好转换一份 pem 私钥进行保存。
将 ppk 私钥转换成 pem 私钥很容易,通过 Conversions->Export OpenSSH Key 菜单即可,选择一个目录进行保存,文件后缀名使用 .pem。
服务器公钥添加
为了能让服务器验证我们的私钥,需要将其对应的公钥保存到 Linux 服务器。
在需要用密钥进行登录的用户目录下创建一个 .ssh 目录:
[icexmoon@192 ~]$ mkdir .ssh
在 ~/.ssh 目录创建一个文件 authorized_keys,并将刚生成的公钥内容写入:
[icexmoon@192 ~]$ cd .ssh
[icexmoon@192 .ssh]$ vim authorized_keys
写入的公钥内容是ssh-rsa xxxxx
,这里的xxxxx
指代实际的公钥内容。
注意
ssh-rsa
后边有一个空格。
SSH 客户端设置
还需要修改 SSH 客户端的设置,让其在连接目标服务器时使用私钥进行验证。
具体的设置方式因 SSH 客户端的不同而不同,我这里使用的是 WindowsTerminal。
Windows 系产品进行 SSH 连接时都用同样的设置方式,比如 VSCode 也同样如此。
打开C盘用户目录下的 .ssh 目录,比如我这里是 C:\Users\70748\.ssh
。
里边有一个 config 文件,打开并编辑(如果没有就创建)。
config 文件的格式如下:
Host 192.168.1.1 HostName 192.168.1.1 User root Port 22 ForwardAgent yes IdentityFile "C:\Users\70748\.ssh\test.pem"
没太多好说的,应该很容易看懂,这里的 IdentityFile 就是用于登录验证的私钥文件。
参考资料
文章评论