我已经设置了ssh密钥,但是VSCode仍在不停地要求输入密码。

41

我正在使用Macbook(MacOS)连接到远程Ubuntu服务器。 我使用ssh-copy-id命令将公共SSH密钥复制到服务器上,并在终端中检查该SSH密钥是否有效。当我执行ssh username@x.x.x.x时,连接会在不要求输入密码的情况下建立。 然而,当我尝试通过Visual Studio Code连接到服务器时,VSCode一直要求输入密码。有没有办法解决这个问题?

提前感谢你!

13个回答

17

这是一个配置文件的问题。
VSCode需要“绝对路径”。

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

.ssh/config中添加“/Users/username”到IdentityFile属性中即可解决问题。


我在Windows上遇到了同样的问题,解决方案与此相关:https://superuser.com/questions/1296024/windows-ssh-permissions-for-private-key-are-too-open - Jsl
1
我在Mac OS上有一个非标准的密钥名称。在本地机器上运行ssh-add /path/to/private/key修复了它。 - Taaam

8

检查一下是否适用于microsoft/vscode-remote-release问题2518

你可以通过删除日志文件(在远程服务器上,以sudo root身份)中的文件来摆脱这种状态:/home/#####/.vscode-server/bin/78a4c91400152c0f27ba4d363eb56d2835f9903a/vscode-remote-lock.#####.78a4c91400152c0f27ba4d363eb56d2835f9903a(使用unlink),或运行“Kill VS Code Server on Host...”命令。

如果再次发生,则可以尝试设置remote.SSH.useFlock

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

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

还有:

在我的情况下,通过终端使用ssh连接到容器后,删除整个~/.vscode-server目录起作用了。
(仅删除~/.vscode-server/bin不起作用。)

OP sukrama评论中确认已解决问题。

这是配置文件中ssh密钥路径的问题。


我尝试删除 ~/.vscode-server 并重新安装 .vscode-server(通过再次在 VSCode 上打开远程服务器)。但它没有起作用 :( 不过还是谢谢你的答案。 - sukrama
@sukrama 好的。关于那个问题的其他建议怎么样?remote.SSH.useFlock在主机上杀死VS Code服务器...,... - VonC
“Kill VS Code Server on Host” 没有起作用。同时,设置 remote.SSH.useFlock 使情况变得更糟(VSCode 在未连接到服务器的情况下不断要求输入密码)。 - sukrama
@sukrama 您的密钥是否受口令保护? - VonC
不,它没有受到密码保护。但我已经解决了这个问题。这是配置文件中ssh密钥路径的问题。 - sukrama
@sukrama 太棒了!干得好。我已经相应地更新了答案。 - VonC

5

以下是一个快速实用的解决方法:您不需要每次删除整个 .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

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

3

即使我已经正确配置了密钥(在终端中可以使用),但我的Windows机器中的VSCode仍然要求输入密码。

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

Host dados
    HostName vrt1234
    User xxxxx

那么正确的用户是应该添加到配置文件中的呢?是user还是DOMAIN\user - undefined
这是Unix用户。这里没有DOMAIN\ - undefined

2

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

来自VS Code 远程调试提示和技巧

在PowerShell窗口中,创建一个公钥/私钥对,就像您在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 打开命令面板,选择 "Remote-SSH: Open SSH Configuration File..." 并编辑配置文件如下:

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

然后在VS Code中运行“Remote-SSH: Connect to Host…”并选择上面的主机时,它应该无需提示即可连接。


1
请记住,如果您使用的是Windows操作系统,IdentityFile路径可以使用/斜杠。 如果您使用\反斜杠,则需要将其重复两次: C:/Users... 或者 C:\Users\.... 请参考以下网址中的“通过专用密钥提高安全性”(第3点)以进行配置密钥身份验证。 https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication - pocjoc
@pocjoc:谢谢你,我已经根据你提供的文档链接,将IdentityFile示例中的反斜杠改为正斜杠。有趣的是,当我在一年前发布这个答案时,单个反斜杠是有效的。 - Kevin D.

1
我需要在我的~/.ssh/config文件中使用UseKeychain yes
配置文件如下所示:
Host server.tld
  HostName server.tld
  User user
  UseKeychain yes
  IdentityFile  ~/.ssh/key

你需要先输入ssh-add -K ~/.ssh/key将你的密钥密码添加到KeyChain中。


UserKeychain 属性似乎对我有效。我不得不重新启动 VSC、推送更改、输入密码短语。然后,我再次重启了 VSC,推送了一项更改,它似乎生效了。我不必再次输入密码短语。 - Mike S.

1

1
你也可以输入 Ctrl + Shift + P 来打开 命令面板
命令面板 中,输入:
Remote-SSH: Kill VS Code Server on Host... 

为了使其正常工作,您需要输入服务器密码。


1

如果您在遵循 Stack Overflow 帖子中的步骤后仍然遇到问题,可能是因为您的 VSCode Remote-SSH 配置文件路径未设置。

请确保将 remote.SSH.configFile 设置为 ~/.ssh/config


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Coder Gautam YT

0
对我来说,问题出在我的公共认证SSH无法工作,而我的主目录权限也有问题。我不得不删除组和其他用户对主目录的写权限,然后一切都正常了。
chmod go-w ~/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接