背景

在使用 VS Code 通过 Remote SSH 连接服务器时,每次操作都需要输入密码,效率较低。

通过配置 SSH 密钥登录,可以实现免密连接服务器,同时提升安全性与操作体验。


一、原理

SSH 免密登录基于非对称加密:

本地生成密钥对 → 公钥上传服务器 → 私钥本地保存 → 自动认证

二、本地生成密钥

在本地终端执行:

ssh-keygen -t ed25519 -C "yourname-hexo"

提示:

  • 文件路径:直接回车(默认)
  • passphrase:可留空(方便使用)

生成后会得到两个文件:

~/.ssh/id_ed25519        # 私钥(保密)
~/.ssh/id_ed25519.pub    # 公钥(上传到服务器)

三、上传公钥到服务器

方法一(推荐)

在本地执行:

ssh-copy-id root@你的服务器IP

输入一次密码即可完成配置。


方法二(Windows 手动方式)

在 Windows CMD 中执行:

type %USERPROFILE%\.ssh\id_ed25519.pub

复制输出内容。


登录服务器后执行:

nano ~/.ssh/authorized_keys

将复制的公钥粘贴进去(必须为一整行)。


四、设置权限(必须)

在服务器执行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

五、测试免密登录

在本地执行:

ssh root@你的服务器IP

如果无需输入密码即可登录,说明配置成功。


六、VS Code 配置

打开 VS Code:

Ctrl + Shift + P

选择:

Remote-SSH: Open SSH Configuration File

编辑:

~/.ssh/config

添加:

Host your-server
    HostName 你的服务器IP
    User root
    IdentityFile ~/.ssh/id_ed25519

七、连接服务器

在 VS Code 中:

Remote-SSH: Connect to Host → your-server

即可免密连接服务器。


八、安全加固(建议)

编辑服务器 SSH 配置:

nano /etc/ssh/sshd_config

找到并修改:

PasswordAuthentication no

然后重启 SSH 服务:

systemctl restart ssh

⚠️ 注意:务必确认免密登录成功后再关闭密码登录。


九、常见问题

1. 仍然需要密码

检查:

ls -l ~/.ssh/authorized_keys

并确认权限:

chmod 600 ~/.ssh/authorized_keys

2. 公钥未生效

调试:

ssh -v root@服务器IP

查看是否出现:

Offering public key

3. Windows 无法使用 cat

替代命令:

type %USERPROFILE%\.ssh\id_ed25519.pub

或使用:

notepad %USERPROFILE%\.ssh\id_ed25519.pub

总结

免密登录 = 公钥上传服务器 + 私钥本地保存