windows 10 ssh proxycommand 报错: “posix_spawn: No such file or directory”(46)

本文解决了Windows 10上使用SSH ProxyCommand时遇到的错误,包括'posix_spawn:Nosuchfileordirectory'问题,权限问题及MacOS下的错误。提供了修改命令路径,设置文件权限及调整VSCode配置的方法。

windows 10 ssh proxycommand 报错: “posix_spawn: No such file or directory”

问题1

ssh使用ProxyCommand通过跳板机连接目标机,报错:

CreateProcessW failed error:2
posix_spawn: No such file or directory

如果用VS code也会报错:

...
[20:50:57.334] > CreateProcessW failed error:2
> 
[20:50:57.344] > posix_spawn: No such file or directory
> 过程试图写入的管道不存在。
> 
...

解决方案

将ssh改成C:\Windows\System32\OpenSSH\ssh.exe或者ssh.exe,参见这篇文章
例如,对于下面的原始命令:
ssh -o ProxyCommand="ssh 192.168.199.6 -W %h:%p" 192.168.199.5
修改后为:
ssh -o ProxyCommand="ssh.exe 192.168.199.6 -W %h:%p" 192.168.199.5

Long Story

在这里插入图片描述

问题2:权限问题

vscode使用了私钥id_rsa但权限不正确。

解决方案

Linux:chmod 400 id_rsa
Windows: 在Windows中右键属性->安全->高级,删除所有继承和主体,添加->选择主体->高级…->立即查找->选择当前登录的用户并给予权限即可

问题3:MacOS

macOS报错:

[19:55:50.141] Resolver error: Error: 
	at Function.Create (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:1:130564)
	at Object.t.handleInstallOutput (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:1:127671)
	at Object.t.tryInstallWithLocalServer (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:102339)
	at processTicksAndRejections (internal/process/task_queues.js:94:5)
	at async /Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:104310
	at async Object.t.withShowDetailsEvent (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:109845)
	at async /Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:100912
	at async R (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:97702)
	at async Object.t.resolveWithLocalServer (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:100561)
	at async Object.t.resolve (/Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:107840)
	at async /Users/leonliang/.vscode/extensions/ms-vscode-remote.remote-ssh-0.55.0/out/extension.js:127:141955
[19:55:50.143] ------

解决方案

如果在mac的root下可以用Command Line+密钥连接多跳服务器,但VSCode无法用config文件连接多跳服务器。多半是/bin/bash的问题,使用/bin/bash -l, 然后使用Command Line+密钥连接多条服务器会发现不行。暂时无法解决。

### 解决SSH连接时出现 'ssh_askpass: posix_spawn: No such file or directory' 错误 当遇到 `ssh_askpass: posix_spawn: No such file or directory` 的错误提示时,这通常意味着系统无法找到或执行指定的 `ssh-askpass` 程序。以下是几种可能的原因及解决方案: #### 安装缺失的组件 如果环境中缺少必要的图形界面程序来处理密码请求,则可能会触发此错误。可以通过安装相应的包解决问题,在 Arch Linux 或其衍生发行版中可以使用以下命令进行安装: ```bash sudo pacman -S x11-ssh-askpass ``` 该操作会确保环境中有可用的 `ssh-askpass` 工具[^1]。 #### 调整路径设置 有时由于路径配置不当也会引发此类问题。特别是跨平台开发场景下,比如 Windows 上运行某些依赖 Unix 风格工具链的应用时更易发生这种情况。此时应确认使用的 SSH 可执行文件位置是否正确,并相应调整命令调用方式。例如,对于原始命令: ```bash ssh -o ProxyCommand="ssh 192.168.199.6 -W %h:%p" 192.168.199.5 ``` 应当修改为显式指明完整的可执行文件路径: ```bash ssh -o ProxyCommand="C:\Windows\System32\OpenSSH\ssh.exe 192.168.199.6 -W %h:%p" 192.168.199.5 ``` 这样做能够有效避免因默认查找路径不包含目标二进制而产生的找不到文件的情况[^2]。 #### 设置环境变量 为了使应用程序能自动定位到合适的 `ssh-askpass` 实现,还可以尝试设定特定的环境变量。具体来说就是定义 `SSH_ASKPASS` 来指向实际存在的 askpass 应用程序的位置。可以从源码中的宏定义得知这一环境变量名称: ```c #define SSH_ASKPASS_ENV "SSH_ASKPASS" ``` 因此可以在启动应用前临时增加这条指令(假设已知确切路径): ```bash export SSH_ASKPASS=/path/to/your/x11-ssh-askpass ``` 这样即使是在非交互式的环境下也能正常工作了[^3]。 #### 使用PyCharm内置功能替代外部依赖 考虑到部分IDE自带的安全机制已经提供了记住密码等功能选项,实际上并不一定非要额外配置公私钥对才能实现免密登录的效果。特别是在 PyCharm 这样的集成开发环境中更是如此——只要勾选 Remember 复选框即可达到相同目的而不必担心频繁输入凭证带来的麻烦[^4]。 综上所述,针对不同情况采取适当措施应该可以帮助克服上述提到的技术难题并顺利完成远程主机间的安全通信建立过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值