要在 VSCode 中实现 SSH 免密登录 Linux 服务器,核心是配置 SSH 公钥认证,让 VSCode 调用本地已配置好的 SSH 连接。以下是完整的操作步骤:

1. 生成本地 SSH 密钥对

打开本地终端(Windows 可使用 PowerShell 或 Git Bash),执行以下命令生成密钥对。推荐使用更安全、性能更好的 ed25519 算法:

ssh-keygen -t ed25519 -C "your_email@example.com"

执行后一路回车即可。注意:如果想完全免密,在提示输入 passphrase 时直接回车留空,否则每次连接仍需输入密钥密码。

2. 将公钥上传到服务器

方法一(推荐,适用于 macOS/Linux 及已安装 ssh-copy-id 的 Windows 环境):

ssh-copy-id user@your_server_ip

执行后会提示输入一次服务器密码,之后公钥会自动追加到服务器的 ~/.ssh/authorized_keys 文件中。

方法二(适用于未安装 ssh-copy-id 的 Windows 环境):
在 PowerShell 中执行:

Get-Content ~/.ssh/id_ed25519.pub | ssh user@your_server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

同样需要输入一次服务器密码。

3. 检查并设置服务器端权限

登录服务器,确保 .ssh 目录和 authorized_keys 文件的权限正确,这是免密登录成功的关键:

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

如果权限过开放,SSH 服务会拒绝读取密钥,导致免密登录失败。

4. 在终端测试免密登录

在本地终端执行以下命令,验证配置是否生效:

ssh user@your_server_ip

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

5. 配置 VSCode 连接

  1. 安装扩展:在 VSCode 扩展市场中搜索并安装 Remote - SSH(Microsoft 官方扩展)。
  2. 连接主机
    • 按下 F1Ctrl+Shift+P(Mac:Cmd+Shift+P)打开命令面板。
    • 输入 Remote-SSH: Connect to Host 并选择。
    • 如果之前已在终端测试过,这里可能会自动识别主机名。如果没有,可以选择 Add New SSH Host…,然后输入 ssh user@your_server_ip 格式的命令添加主机。
  3. (可选)配置 SSH Config 文件:如需指定密钥文件或设置别名,可以编辑本地 ~/.ssh/config 文件:
    Host MyServerAlias          # 自定义别名
      HostName your_server_ip   # 服务器 IP 或域名
      User username             # 登录用户名
      IdentityFile ~/.ssh/id_ed25519  # 私钥路径
    
    配置后,在 VSCode 的 Remote-SSH 中即可通过别名 MyServerAlias 连接。

6. 验证与连接

在 VSCode 中再次通过 Remote-SSH: Connect to Host 选择你的主机或别名进行连接。如果配置正确,连接过程中将不会弹出密码输入框,底部状态栏会显示连接成功的信息。

常见问题排查

  • 连接时仍要求输入密码:首先确认在系统终端中执行 ssh user@your_server_ip 是否已免密。如果终端可以而 VSCode 不行,检查 VSCode 的 Remote-SSH 扩展是否已正确安装,并尝试重启 VSCode。
  • 权限问题:确保服务器上 ~/.ssh 目录权限为 700~/.ssh/authorized_keys 文件权限为 600
  • Windows 环境特殊说明:Windows 系统可能默认未提供 ssh-copy-id 命令,可使用上述方法二手动上传公钥。

只要你的系统终端能实现 SSH 免密登录,VSCode 通过 Remote-SSH 扩展就能无缝继承这一配置,实现一键连接。

是的,有专门追求性能的优化方式。核心是选择 Ed25519 算法,它在密钥生成、签名和验证速度上都显著优于传统的 RSA 和 ECDSA。

为什么 Ed25519 性能最优?

  1. 算法效率高:Ed25519 基于椭圆曲线加密,其签名生成和验证速度比 RSA-4096 快约 30%。在批量 SSH 操作(如 Ansible 管理多台服务器)时,使用 Ed25519 密钥的总耗时可比 RSA-4096 减少约 12 秒(从 98 秒降至 86 秒)。
  2. 密钥生成快:Ed25519 的密钥生成速度比 RSA 快约 3 倍。
  3. 登录验证快:其登录验证速度比 RSA 快约 10 倍。
  4. 密钥尺寸小:Ed25519 公钥仅约 68 字节,而 RSA-4096 公钥超过 800 字节。更小的密钥意味着更快的传输和更低的网络开销。

如何生成高性能的 Ed25519 密钥?

执行以下命令即可生成:

ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519:指定使用 Ed25519 算法。
  • -C:添加注释(通常用邮箱),便于标识密钥用途。

关键提示:在提示输入 passphrase(密钥密码)时,如果直接按回车留空,则可实现完全免密登录(无需输入密码)。但这会降低密钥本身的安全性,请仅在受信任的私人环境中使用。

进阶性能调优(可选)

  1. 调整密钥生成轮数(rounds):Ed25519 密钥生成时默认使用 16 轮哈希计算。理论上,减少轮数可以略微加快生成速度,但会降低对抗暴力破解的强度。不过,这仅影响密钥生成阶段,对后续 SSH 连接性能无影响。一般用户无需调整。
  2. 开启 SSH 连接复用(ControlMaster):这能让你对同一服务器的多个 SSH 会话共享一个 TCP 连接,避免重复握手和密钥交换。实测第二次连接耗时可从 1.2 秒降至 0.1 秒。配置方法是在 ~/.ssh/config 中添加:
    Host *
      ControlMaster auto
      ControlPath ~/.ssh/sockets/%r@%h-%p
      ControlPersist 600
    
    然后创建目录:mkdir -p ~/.ssh/sockets && chmod 700 ~/.ssh/sockets

总结

若你只追求极致的 SSH 连接性能,最佳实践就是:

  1. 使用 ssh-keygen -t ed25519 生成密钥。
  2. 在安全可控的环境下,生成密钥时不设置 passphrase(直接回车)。
  3. 在 SSH 配置中启用连接复用(ControlMaster)。

这样就能在算法层面和连接管理层面都获得最佳性能。

这两条命令用于在Linux系统中设置SSH相关目录和文件的权限,以确保系统安全。

1. chmod 700 ~/.ssh

  • 功能:此命令将用户主目录下的 .ssh 目录的权限设置为 700
  • 权限解释
    • 在Linux的权限表示法中,700 是一个八进制数,对应 rwx------。其中,第一个数字 7 代表文件所有者(user)的权限,它是读(r = 4)、写(w = 2)和执行(x = 1)权限的总和(4 + 2 + 1 = 7),意味着文件所有者对 .ssh 目录具有读、写和执行权限。
    • 第二个数字 0 代表所属组(group)的权限,这里表示所属组对该目录没有任何权限。
    • 第三个数字 0 代表其他用户(others)的权限,同样表示其他用户对该目录没有任何权限。
  • 目的:限制对 .ssh 目录的访问,只有文件所有者能够对其进行操作,防止其他用户篡改或访问其中的敏感文件,比如SSH私钥等。

2. chmod 600 ~/.ssh/authorized_keys

  • 功能:该命令将 .ssh 目录下的 authorized_keys 文件的权限设置为 600
  • 权限解释
    • 600 对应 rw-------。数字 6 表示文件所有者对 authorized_keys 文件具有读(r = 4)和写(w = 2)权限(4 + 2 = 6)。
    • 同样,第二个和第三个数字 0 分别表示所属组和其他用户对该文件没有任何权限。
  • 目的authorized_keys 文件用于存储允许通过SSH无密码登录到该系统的公钥。将其权限设置为 600,确保只有文件所有者能够读取和修改该文件,防止其他用户未经授权修改此文件,进而保证SSH基于密钥认证的安全性。

在设置这两个权限时,需要确保操作的用户是文件所有者或具有足够权限(如 root 用户),否则可能会因为权限不足而导致设置失败。

更多推荐