我已经设置了 ssh 密钥,但是 VSCode 一直要求输入密码

I've already setup the ssh key, but VSCode keeps asking for password

我正在使用 macbook(MacOS) 连接到远程 Ubuntu 服务器。 我使用 ssh-copy-id 将 public ssh 密钥复制到服务器并检查 ssh 密钥在终端上是否有效。当我执行 ssh username@x.x.x.x 时,无需输入密码即可建立连接)。 但是,当我尝试通过 Visual Studio 代码连接到服务器时,VSCode 一直要求输入密码。有办法解决这个问题吗?

提前致谢!

检查microsoft/vscode-remote-release issue 2518是否适用:

You should be able to get out of this state by deleting the file (on the remote server side, as sudo root) in the log, /home/#####/.vscode-server/bin/78a4c91400152c0f27ba4d363eb56d2835f9903a/vscode-remote-lock.#####.78a4c91400152c0f27ba4d363eb56d2835f9903a (with unlink) or running the command "Kill VS Code Server on Host..."

If it happens again, you might try setting remote.SSH.useFlock.

The exact command to run in the command palette (View->Command Palette) is:

Remote-SSH: Kill VS Code Server on Host...

还有:

In my case, deleting entire ~/.vscode-server directory after connecting to the container through ssh using terminal worked.
(Deleting only ~/.vscode-server/bin did not work.)

OP sukrama confirms 已解决问题

It was a problem with ssh key path in config file.

配置文件有问题。
VSCode 需要“绝对”路径。

对于 MacOS,ssh-copy-id 似乎只复制相对于用户的绝对路径。
换句话说,它在“/.ssh”之前省略了“/Users/username”。

.ssh/configIdentityFile 属性中添加“/Users/username” 解决了问题。

这里有一个快速方便的解决方法:您不必每次都删除整个 .vscode-server 文件夹!问题似乎是一个名为 'vscode-remote-lock...' 的文件。它可以位于 ~/.vscode-server/bin/ 中的文件夹内。该文件是在每次通过 vscode 登录 ssh 时创建的。 运行 远程主机上的以下脚本。它会在创建文件时删除该文件:

while true
do
  if ls /home/<your-username>/.vscode-server/bin/*/vscode-remote-lock.<your-username>.* 1> /dev/null 2>&1; then
    find /home/<your-username>/.vscode-server/bin/*/ -name vscode-remote-lock.<your-username>.* -delete
    echo "Killed the troublemaker! ^_^"
  fi
done

文件名和文件夹名可能因机器而异。因此,在您的机器上找到名称并将它们粘贴到脚本中。然后 运行 脚本,你就可以开始了。

VSCode 在我的 Windows 机器中要求输入密码,即使我的密钥配置正确(它在终端上工作)。

我的问题是 VSCode 选择了错误的用户。我正在使用在我的 ssh 配置文件中配置的主机,并且 VSCode 将用户设置为 DOMAIN\user 而不是 user。我解决了它在我的 .ssh/config 文件中配置正确的用户:

Host dados
    HostName vrt1234
    User xxxxx

我不得不在我的 ~/.ssh/config 文件中使用 UseKeychain yes

配置文件如下所示:

Host server.tld
  HostName server.tld
  User user
  UseKeychain yes
  IdentityFile  ~/.ssh/key

您必须先输入 ssh-add -K ~/.ssh/key 才能将您的密码添加到 KeyChain。

如果您在 Windows 中遇到此问题,请记住,您可能用于从 WSL 连接到远程计算机的 public/private 密钥与VS Code 将用于从 Windows 进行连接。您需要为 Windows 创建一个单独的 public/private 密钥对,并将该私钥也导出到远程服务器。

来自VS Code remote debug tips and tricks

在 Powershell window 中,创建一个 public/private 密钥对,就像在 Linux 终端中一样:

ssh-keygen -t rsa -b 4096

然后导出到远程服务器:

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

ssh $USER_AT_HOST "powershell New-Item -Force -ItemType Directory -Path \"$HOME\.ssh\"; Add-Content -Force -Path \"$HOME\.ssh\authorized_keys\" -Value '$(tr -d '\n\r' < "$PUBKEYPATH")'"

确保您可以通过 PowerShell 通过无密码 SSH 连接。

最后,在 VS Code 中。按 Ctrl+Shift+P 打开命令选项板,然后 select“Remote-SSH: 打开 SSH 配置文件...”并像这样编辑配置文件:

Host [convenient name]
    HostName [hostname]
    User [username]
    IdentityFile C:\Users\[username]\.ssh\id_rsa*

然后当您在 VS Code 中 运行“Remote-SSH: 连接到主机...”并选择上面的主机时,它应该会在不提示输入密码的情况下连接。

如果这对某人有帮助,我遇到了类似的问题,即 VSC 要求输入密码(而不是密码)。 我注意到我的密钥在网络驱动器上,看起来 VSC 无法在那里读取它。 我将它移动到本地文件 (C:) 并且它有效。