在使用 Visual Studio Code 的 Remote-SSH 插件1进行远程开发时,若未配置使用密钥认证,则每次转换目录都需要输入密码,十分不方便。本文关注于:
- Windows 机器访问 Linux 机器
- Windows 机器访问 Windows 机器
安装 Remote-SSH
-
Ctrl+Shift+X搜索插件 -
安装
安装成功后 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 开发环境。