VScode remote connection error: The process tried to write to a nonexistent pipe

VScode remote connection error: The process tried to write to a nonexistent pipe

我使用vscode和remote-ssh连接我的服务器,配置后,我想连接我的主机,但是失败了,对话框显示:“无法建立与XX的连接,处理中试图写入一个不存在的管道。"

输出:

[16:45:20.916] Log Level: 3
[16:45:20.936] remote-ssh@0.49.0
[16:45:20.936] win32 x64
[16:45:20.944] SSH Resolver called for "ssh-remote+aliyun", attempt 1
[16:45:20.945] SSH Resolver called for host: aliyun
[16:45:20.945] Setting up SSH remote "aliyun"
[16:45:21.012] Using commit id "c47d83b293181d9be64f27ff093689e8e7aed054" and quality "stable" for server
[16:45:21.014] Install and start server if needed
[16:45:21.019] Checking ssh with "ssh -V"
[16:45:21.144] > OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
[16:45:21.214] Running script with connection command: ssh -T -D 5023 aliyun bash
[16:45:21.221] Terminal shell path: C:\WINDOWS\System32\cmd.exe
[16:45:21.504] > 
> 
>
> ]0;C:\WINDOWS\System32\cmd.exe
[16:45:21.505] Got some output, clearing connection timeout
[16:45:21.577] > 
> 
>
> 
[16:45:21.592] > Bad owner or permissions on C:\Users\DY/.ssh/config
> 
[16:45:21.689] > The process tried to write to a nonexistent pipe.
> 
[16:45:22.091] "install" terminal command done
[16:45:22.092] Install terminal quit with output: The process tried to write to a nonexistent pipe.
[16:45:22.093] Received install output: The process tried to write to a nonexistent pipe.
[16:45:22.096] Resolver error: The process tried to write to a nonexistent pipe
[16:45:22.107] ------

将绝对文件路径添加到自定义 SSH 配置文件(C:\Users\{USERNAME}\.ssh\config),我的问题就解决了。

对我有用的是删除文件夹的所有内容:C:\Users\MYNAME.ssh 这意味着删除配置文件和已知主机。该配置可能是要删除的最重要的配置。

有一个现有的(有效的)配置,但在我添加一个新配置时出现了同样的错误。对我有用的不仅仅是添加新的主机配置,我还注释掉了第一个工作配置。不知道发生了什么,但它起作用了。

如果您 format/re-install 服务器 OS,但使用与以前相同的 IP, 你可能会遇到指纹不匹配的问题。

您可能需要删除此文件中的旧指纹: C:\Users\xxx.ssh\known_host

和文件中的旧 IP: C:\Users\xxx.ssh\config

然后尝试重新添加主机。

在我的例子中,我有另一个设置:

  • Git Windows 中的 bash 已配置,我正在使用此工具提供的 ssh.exe
  • 在VSCode中的“Remote SSH”扩展中,我指定了这个ssh.exe
  • 的完整路径
  • 我正在使用多个服务器(使用 ProxyJump)
  • 错误消息与 OP 相同,但在日志中写到找不到 ssh 配置文件,其中所有文件夹名称都被连接起来(因为它无法识别 windows 路径分隔符)

问题:ssh.exe 使用的路径约定与 VSCode 不同。 ssh.exe 使用“/c/Users/...”模式,VSCode 使用“C:\Users...”模式。

解决方案:

  1. 确保 SSH 配置位于标准位置 (C:\Users\LOGIN\.ssh\config)
  2. 在VSCode
  3. 的“Remote SSH”设置中去掉配置文件的绝对路径

VSCode 仍将能够使用标准路径访问设置,并且 ssh.exe 配置仍将查看相同的标准路径,因此连接正常。

注:

只有在连接多个 ssh 服务器(使用 ProxyJump)时才会出现错误。当只连接到第一台服务器时,@pszrux 的解决方案和这个都对我有用。

在我的例子中,这是我在 Windows 中 known_hosts 中的违规密钥(vscode 在 windows 中,通过 ssh 在 linux 中远程开发) .

vscode 中返回的错误没有任何解释。

对我有用的:

  1. 删除 C:\Program Data\sshC:\<user>\.ssh
  2. 中的 ssh 配置文件夹
  3. 在 VS Code 中,按 F1,选择 Remote-SSH: Connect to Host...
  4. 不要在提示中输入任何内容,而是选择 + Add New SSH Host..
  5. 输入完整的 ssh 命令,包括密钥(如果是 Windows, 你可能想用双引号将路径括起来)ssh -i "C:\path\to\key" user@host。 (您需要确保密钥具有有限的权限。删除所有继承的权限,并且只将完全控制权授予所有者。)
  6. 系统会要求您选择一个文件夹,用于创建新的配置文件。选择两个选项中的任何一个。
  7. 会有提示通知新的配置文件 已经被创造了。点击connect

OS: windows 10

就我而言,存在权限问题。在 windows 中反复更改继承并没有解决问题。终于成功了

更改存储配置文件的文件夹。 从 C:/users/usr/.ssh/configD:/config 并在 vscode 远程 ssh 设置中更改了 config 路径。

这对我有用。

这可能是每个人在看这里之前都尝试过的方法,但它对我有用。我试图通过 ssh 连接到的服务器没有响应,导致不存在的管道错误。我重新启动了服务器,一切正常。

在我的例子中,密钥文件的路径是错误的。

对我来说,(windows).pem 文件的权限是关键问题。我只有 pem 文件上有管理员组,但它不起作用。我还必须明确添加管理员用户(即使管理员当然在管理员组中)。

这似乎是一个有多种原因和相应补救措施的问题。就我而言,问题与我使用的 ssh 版本有关。在我的 Windows 路径中有两个地方是 ssh.exe 的一个实例:

C:\Program Files (x86)\OpenSSH\bin
C:\WINDOWS\System32\OpenSSH\

在使用两个路径设置 "Remote.SSH: Path" 参数后(在 "Remote.SSH: Settings" [参见 ]),即首先 C:\Program Files (x86)\OpenSSH\bin\ssh.exe 然后 C:\WINDOWS\System32\OpenSSH\ssh.exe, 问题依旧。

然后我查看了this并尝试了git提供的ssh.exe,我已经在我的系统上了(否则,只需安装git,它很好无论如何:) )

使用 that 版本设置 SSH 路径参数对我有用,即将路径设置为:

C:\Program Files\Git\usr\bin\ssh.exe

尝试在“IdentityFile”中添加完整路径成功了

" IdentityFile C:\Users\xxx.ssh\xxx"

就我而言,我没有互联网连接。

我正在通过VPN 连接到服务器,但是远程配置不正确,我无法访问服务器。 (DNS相关问题)连接指示器没有显示错误,所以我一开始没有想到。

哎呀:)

对于Windows:

在私钥文件名前添加转义字符并在路径两边使用引号解决了我的问题。

//配置文件

Host 12.12.12.12
  HostName 12.12.12.12
  IdentityFile "C:\Users\USERNAME/\PRIVATEKEY" <----Note /\
  User username

在我的例子中,我做了 dalilander 所说的,但我没有删除整个“.ssh”文件夹,我只需要删除文件 'known_hosts' 然后它就起作用了。所以我保存的服务器没有被删除

那个文件夹的路径是 C:\Users\你的用户名\.ssh

我真的不想删除我的 C:Users\valo\.ssh\config,所以我对各种条目进行了一些尝试。事实证明,对我来说,选项 IdentitiesOnly yes 是问题所在。我还禁用了 .ssh 文件夹中所有关键文件的安全继承,只留下我自己和 Full Rights。这是我的 C:Users\valo\.ssh\config 现在的样子:

CanonicalizeHostname yes

Host aws.r3
  HostName 3.31.45.216
  ForwardAgent yes
  User ubuntu
  IdentityFile C:Users\valo\.ssh\u1-client-20210203-090555.pem
  # IdentitiesOnly yes    # VSCode Remote doesn't like this flag...?

Host github
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_val_ed25519

Host github.vm
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_valo_ed25519

Host *
  ForwardAgent yes
  AddKeysToAgent yes
  LogLevel FATAL
  ChallengeResponseAuthentication no

现在我可以使用 VSCode 远程连接到 aws.r3

我的解决方案是编辑 VSC 的 json 设置文件,如下所示:https://code.visualstudio.com/docs/remote/troubleshooting#_troubleshooting-hanging-or-failing-connections 在 VSC 中,转到文件、首选项、设置,然后单击右上角的图标(打开设置,JSON)。将这两行添加到 settings.json 并重试连接:

"remote.SSH.showLoginTerminal": true,
"remote.SSH.useLocalServer": false

可能的解决方案:

首先在您的计算机上 运行 cat $HOME/.ssh/id_rsa.pub。那会给你一把钥匙。将此密钥保存在某处。

然后在您要连接到的计算机上 运行ning vim $HOME/.ssh/authorized_keys 打开此文件。然后将密钥复制到该文件的新行中,然后键入 :wq.

将其关闭

大功告成。

在我的例子中,这是因为我在 config 中给主机的名字是 myuser@myhostname。因此,如果您的 config 文件如下所示:

Host myuser@myhostname
    HostName 12.64.88.234
    User myuser
    Port 22

尝试将其更改为:

Host myuser
    HostName 12.64.88.234
    User myuser
    Port 22

通过在指定私钥时添加“.pem”扩展名解决了我的问题。 这是供参考的示例配置文本。

Host ec2-3-234-8-176.compute-1.amazonaws.com
  HostName ec2-3-234-8-176.compute-1.amazonaws.com
  IdentityFile ~/.ssh/privatekey.pem
  User username

可能有几个原因与接受的答案无关。对我来说:

  1. Ubuntu 14.04.1 LTS 似乎无法运行
  2. EC2 身份验证问题,请参阅 and pem file permissions

还有一个貌似 cause/solution:

  • 将配置路径显式添加到设置只会导致 EISDIR 错误。
  • 从 known_hosts 中删除列表使其需要确认指纹,但它没有提供执行此操作的方法。我可以在终端输出中看到它在尝试。
  • 一位同事推荐的解决方案是从服务器中删除 vscode-server 文件。这是我案例中的关键步骤。但是...

使用另一个客户端连接到服务器,我尝试 rm -rf ~/.vscode-server。由于“设备或资源繁忙”,我无法删除许多文件。

最终需要执行以下操作:

  1. fuser ~/.vscode-server/[one of the child files ...]。但是,你可以跳过这个,因为主要是我需要知道要搜索什么。另外,fuserlsof 对返回结果很挑剔——他们经常只是坐着等待什么,我不知道是什么。
  2. ps -e | grep node 因为节点是 运行ning 进程,使用 vscode-server 文件。
  3. 对于步骤 2 中节点进程列表中的每个 PID,运行 ps -o user= -p PID,依次用每个进程 PID 替换 PID。这将创建进程关联用户的格式化列表。
    这是为了确定您拥有哪些节点进程,因此您甚至不会试图杀死其他任何人。
  4. 从我拥有的最低节点 PID 开始,运行kill -9 PID。您不需要为所有 PID 运行 这样做,因为杀死一个较低的 PID 会在几秒钟后杀死一个子 PID。因此,在杀死一个节点后继续检查哪些节点进程仍然存在:ps -e | grep node
  5. 最后,等我的都杀光了,我就可以rm -rf ~/.vscode-server
  6. 然后,我又可以在 VS Code 中通过 ssh 连接了。而且,由于我从 known_hosts 中删除了指纹,它甚至要求确认与服务器的连接(在顶部,在命令提示符中)。

此外,为了参考,我将其他解决方案中提到的 remote-ssh: settings 配置文件条目留空。

以上某些步骤的参考或进一步解释(我不打算详细说明):

rm: cannot remove ‘.vscode-server/bin/xxxxxx/.nfs000000000xxxxxxxxxxxx’: Device or resource busy

How find out which process is using a file in Linux?

https://unix.stackexchange.com/questions/284934/return-owner-of-process-given-pid/284938

下面的解决方案可能是最后的手段,但它在 Windows 10 本地机器上完美地解决了我的问题。我只是删除目录C:\Users\[your-username]\.ssh下的known_hosts文件,重新启动VS Code并通过Remote Explorer重新连接远程服务器。之后一切正常。

至少可能发生三件事:

选项 1

您的配置文件的位置不是绝对位置,这意味着您可能正在使用配置文件所在的文件夹的位置。

如果是这种情况,请访问 VSCode 中的用户设置。滚动到 Extensions>Remote - SSH。并在自定义 SSH 配置文件的绝对文件路径末尾添加 config。在Windows,可以是

C:\Users\user\.ssh\config

见下图


选项 2

身份验证问题。

如果是这种情况,可能解决的问题之一是生成新的 SSH 密钥。

在 Windows 中,为此,我建议使用 MobaXterm

在 MobaXterm 中,打开一个新的终端并写入

ssh-keygen -b 4096 -t rsa

然后,在配置文件中,确保 IdentityFile 指向密钥的位置。 MobaXterm 的主目录通常是 C:\Users\user\Documents\MobaXterm。如果方便的话,可以 copy/move C:\Users\user\.ssh 的键,然后在配置文件中添加 IdentityFile ~/.ssh/KEY_rsa (其中 KEY_rsa 是 [public]键)。

请注意,如果您使用PuTTY生成密钥,在服务器OpenSSH authorized_keys文件上,一个不想要一个保存的public密钥,而是一个出现在顶部(见下图):


选项 3

您的 config 文件可能有误。

配置文件大致如下所示。仔细检查字段是否包含建立连接所需的信息。

Host Test # This is the name we want to give the host
    User user # This is the username
    Hostname blabla.com # This is the hostname
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/KEY_rsa # This is the location of the key
    IdentitiesOnly yes
    Port 50    # This varies

这似乎是 ssh 连接因多种原因之一而失败时的一般错误。

添加我的问题是什么,以及有什么帮助,因为我在这里的其他答案中没有看到它:我已经重新安装了我正在连接的盒子,并用它重置了它的密钥用于验证。 ssh 进程尝试连接并失败,并出现常见的“有人可能正在对你进行 MITMing,身份已更改”错误,在 VSCode 终端中可见。解决方案是转到我的 authorized_keys 文件并删除有问题的密钥。

显然只知道如果你确定为什么标识改变了,而且它是无害的。不要真的得到 MITMed。

在我的例子中,当我在我的表达式中添加端口时它起作用了,例如 ssh user@host-or-ip -p 22。默认端口号为“22”,但您可以使用 sudo service ssh status 命令检查 ssh 系统正在侦听的端口。

如果您正在使用 WSL 并且可能认为您应该更新 ~/.ssh/config,那可能并非如此。

  1. ~/.ssh/config
  2. 复制内容
  3. 将其附加C:\User\xxx\.ssh\configwindows文件
  4. 确保 public/private 键在 C:\User\xxx\.ssh\ 上并且在配置中列出
  5. 重新连接

WSL相关

就我而言,问题是我的密钥是在 WSL 的 Ubuntu 上设置的,而 VS Code 正在 Windows 中寻找它们。我将密钥从 WSL 端复制到 Windows,瞧!工作得很好!

我走过的步数。

  1. 导航到 WSL 中的 /home//.ssh 文件夹,然后输入 explorer.exe .
  2. 从那里,我复制了 id_rsa 和 id_rsa.pub 文件并将它们粘贴到 C:\Users<用户名>.ssh
  3. 下的 windows 端
  4. 然后我尝试从 VS Code 再次连接,它运行良好。

我遇到过一次这个问题。

你需要做的就是,

  1. 转到/Users/XXX/.ssh

  2. 如果你在windows,使用命令:“del /f known_hosts”在命令提示符下删除known_hosts。

3.Then 转到 C:\Users\XXX.ssh\config 在 vs 代码(配置文件)

4.Delete 主机和用户(如果您尝试连接的主机已经存在)。

5.Then 尝试连接到新主机,因为 usual.This 可以。

这里的问题可能是您在主机上重新安装 OS 后指纹不匹配。 所以通过删除保存的主机来解决这个问题。

一旦编辑了 vs code 上的配置文件,它应该看起来像..below picture is to show how the config file should look(after deleting the host saved)

这里是编码新手。我遇到了这个问题“进程试图写入一个不存在的管道。”尝试对 VS Code、EC2 实例进行各种更改,并删除了 known_hosts 文件。结果我被“访问被拒绝”,因为前一天我将另一个用户添加到我的用户名作为 linux 组(我正在学习组的工作原理)。当我从组中删除其他用户(“$gpasswd -d user2 user1”)时,我的 ssh 问题得到解决。

确保在要连接的服务器上安装了 ssh-server。

sudo apt update
sudo apt install openssh-server

我因此成功浪费了我的 4 个小时。