配置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
中,该文件一行存储一个公钥,注意不要覆盖到其他的公钥