我正在尝试对AWS托管实例执行SSH和SCP。我的机器的公钥存储在该托管实例中。不需要.pem文件。我正在使用以下命令。
scp -r username@instance-id:/pathtoremotefile localpath
scp localfilepath username@instance-id:~
ssh username@instance-id
但是这些都不在Windows中工作。错误显示“ CreateProcessW失败错误:2 posix_spawn:没有这样的文件或目录失去连接”。我要提到的是,我可以使用此命令启动到该实例的ssm会话
aws ssm start-session --target instance-id.
受管实例具有linux操作系统,而我的电脑具有Windows。另外,在.ssh目录的配置文件中,我添加了以下几行。
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
奇怪的是,我可以使用相同的命令在同一台计算机的“ Linux的Windows子系统”中同时执行ssh和SCP。但是无法在Windows命令提示符下执行此操作。我究竟做错了什么?
这似乎是Windows openSSH软件包的问题。在ProxyCommands中,它请求完整路径限定符,但最好在此处使用正斜杠!
ProxyCommand C:/somepath/sh.exe -c "aws ssm ...
我不再使用Windows openSSH,而是使用git-bash中的ssh命令来避免所有Windows问题。
密钥代理可以完美运行,proxyCommand / proxyJumps可以正常运行,并且与Windows相比,它是可靠的。
感谢您的回复,@ jeb,但我不明白。我应该走哪条路?
@Jass在您的示例中使用
sh
,因此您需要该可执行文件的完整Windows路径。谢谢@jeb,我知道我做错了。我应该使用的proxy命令是不同的。我使用的是Linux命令,但对于Windows,它应该是这样的:#通过会话管理器主机i- * mi- * ProxyCommand C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe上的SSH“ aws ssm start- session --target%h --document-name AWS-StartSSHSession --parameters portNumber =%p“。谢谢,我从您的答案中得到了帮助。
太好了,谢谢您的回答。它可以在我的机器上工作。
那太棒了!@MichalŠípek