VS Code Remote-SSH 配置密钥认证

1,377 阅读2分钟

在使用 Visual Studio Code 的 Remote-SSH 插件1进行远程开发时,若未配置使用密钥认证,则每次转换目录都需要输入密码,十分不方便。本文关注于:

  • Windows 机器访问 Linux 机器
  • Windows 机器访问 Windows 机器

安装 Remote-SSH

  1. Ctrl+Shift+X搜索插件

  2. 安装

    安装成功后 VS Code 左下角会有绿色插件标志。

配置基于密钥的认证2

生成SSH密钥对

检查是否已经已经有生成的密钥对,Windows 一般在C:\Users\your-user\.ssh目录下。

若没有,可以在 PowerShell 中执行下面的命令生成

ssh-keygen -t rsa -b 4096

可以一路回车,不输入密码,使用默认配置。

授权 Windows 机器访问 Linux 服务器

在本地 Windows 机器的 PowerShell 中,运行下面的命令

$USER_AT_HOST="your-user-name-on-host@hostname"
$PUBKEYPATH="$HOME\.ssh\id_rsa.pub"

$pubKey=(Get-Content "$PUBKEYPATH" | Out-String); ssh "$USER_AT_HOST" "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '${pubKey}' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

其中,$USER_AT_HOST$PUBKEYPATH需要根据实际情况自行配置

授权 Windows 机器访问 Windows 机器

在本地 Windows 机器的 PowerShell 中,运行下面的命令

$USER_AT_HOST="your-user-name-on-host@hostname"
$PUBKEYPATH="$HOME\.ssh\id_rsa.pub"

Get-Content "$PUBKEYPATH" | Out-String | ssh $USER_AT_HOST "powershell `"New-Item -Force -ItemType Directory -Path `"`$HOME\.ssh`"; Add-Content -Force -Path `"`$HOME\.ssh\authorized_keys`" `""

其中,$USER_AT_HOST$PUBKEYPATH需要根据实际情况自行配置。

此时,虽然远程的 Windows 机器已有本地 Windows 机器的私钥,但是在 PowerShell 中执行

ssh username@ipdaar

后,仍然提示要输入密码,即配置的公钥没有起作用!

微软的 OpenSSH 指南3指出,需要用到一个名为OpenSSHUtils的工具进行密钥权限修复,但是该工具可能已经被弃用,且无法再安装,因此此路可能不同。

学习了前人经验4后,发现将远程服务器上C:\ProgramData\ssh\sshd_config中的最后两行注释,即可通过私钥进行远程认证。具体操作为:

(1) 以管理员身份打开 Powershell

(2) 使用 VS Code 编辑 sshd_config

code C:\ProgramData\ssh\sshd_config

(3) 注释调末尾的

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

(4) 保存

(5) 重启 ssh server

Restart-Service sshd

至此,无需再输入密码,即可通过 Remote-SSH 连接远程的 Windows 开发环境。

参考

Footnotes

  1. Remote Development using SSH

  2. Configuring key based authentication

  3. docs.microsoft.com/zh-cn/windo…

  4. www.cnblogs.com/surplus/p/1…