配置SSH免密码登录
在Windows/Linux/VSCode下配置SSH免密登录,提升SSH登录便捷性与安全性
SSH密钥登录优势
🔒安全性
相对于传统的密码登录(密码在网络中传输),密钥对登录因为其非对称加密的特性会极大提升安全性。ssh-keygen使用了非对称算法生成一个公钥和私钥(默认算法是SHA256),私钥一直存储在客户端,而公钥保存至服务器。在SSH登录过程中不涉及密码传输以及私钥传输,即便是公钥被窃取,也无法逆向推导出私钥。
- 客户端通过
ssh-keygen生成自己的公钥和私钥。 - 手动将客户端的公钥放入远程服务器的指定位置(
~/.ssh)。 - 客户端向服务器发起 SSH 登录的请求。
- 服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
- 客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
- 服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。
🚗便捷性
VSCode使用传统密码远程连接主机且打开工作区的时候,往往需要手动输入2-3次密码,长期使用则十分繁琐。使用密钥对登录则只要确保SSH密钥对配置成功,后续SSH登录都不再需要输入密码。
SSH客户端配置
以服务器unraid, 登录用户root 为例
Windows客户端
以用户名Orionxer为例,SSH公钥、私钥以及配置文件存储在该路径C:\Users\Orionxer\.ssh
不建议使用PowerShell进行SSH的密钥对生成以及配置,PowerShell缺少ssh-copy-id[2]命令
1.进入密钥路径
打开Git Bash终端并进入.ssh文件夹
1 | |
2.生成密钥对
私钥名称格式 = Host_id_rsa(有助于区分多个服务器),比如unraid_id_rsa,则该命令会自动生成公钥名称:unraid_id_rsa.pub
1 | |

3.传输公钥到服务器
1 | |

4.配置ssh_config
1 | |
添加以下配置
1 | |
以上配置要求SSH登陆使用密钥对的验证方式,更多参数定义查阅SSH官网[3]
5.SSH登录
1 | |

Linux客户端
一般的Linux系统,SSH公钥、私钥以及配置文件存储在该路径~/.ssh
Linux的SSH密钥对生成与配置步骤与Windows一致。
使用WSL2 Ubuntu系统,服务器unraid, 登录用户root为例
1.进入密钥路径
打开Bash终端并进入.ssh文件夹
1 | |
2.生成密钥对
根据提示填写私钥名称以及回车确认密码,生成公钥以及私钥
1 | |
3.传输公钥到服务器
根据提示输入服务器密码
1 | |
4.配置ssh_config
1 | |
添加以下配置
1 | |
5.SSH登录
1 | |

VSCode客户端
确保VSCode已经安装Remote-SSH插件, 且假设VSCode安装在Windows上
其他传输公钥的方式
本质上能够将公钥内容追加至服务器的~/.ssh/authorized_keys文件里都可以
以服务器Tower, 登录用户root为例
SCP上传公钥
1 | |
直接复制公钥
以客户端上的公钥Tower_id_rsa.pub为例,其内容如下
1 | |
复制以上内容后,追加到服务器的~/.ssh/authorized_keys中,该文件一行存储一个公钥,注意不要覆盖到其他的公钥