SSH 密钥身份验证成功后,SSH 和 SCP 命令无法执行并显示错误消息:Win32 错误 1114

Posted

技术标签:

【中文标题】SSH 密钥身份验证成功后,SSH 和 SCP 命令无法执行并显示错误消息:Win32 错误 1114【英文标题】:SSH and SCP commands fail to execute after successful SSH key authentification with error message: Win32 error 1114 【发布时间】:2019-05-08 06:42:53 【问题描述】:

我正在尝试自动将文件从 Odroid XU4 (Linux) 上的 Linux 传输到我在 Windows 上的计算机。

我可以使用 SSH 密钥对我的 Windows 机器进行身份验证,甚至可以从我的 Odroid 访问 MobaXterm 终端,但是当我尝试发送 ssh 或 scp 命令时,例如 ssh User@IP [command]scp [file] User@IP:[destination] 我收到以下错误:

1 [main] sshd 11572 C:\WINDOWS\SysWOW64\bsh\usr\sbin\sshd.exe: *** 致命错误 - 无法加载 C:\WINDOWS\system32\user32.dll,Win32 错误 1114

我不明白这是从哪里来的,原因如下:

它之前工作过我尝试使用 Python 管理 SSH 连接和命令。 它可以在我的 Raspberry Pi 上与 Raspbian 一起使用,即使在我开始收到错误之后也是如此。我想也许我无意中修改了我的 cygwin 配置中的某些内容,但我仍然可以通过 RP 连接和发送命令的事实说明了这一点。

我对制作 SSH/SCP 通信协议还是很陌生,是不是我修改了用于访问远程主机的“通道”?有没有人遇到并克服了这个问题?

我在这个错误上找到的唯一文档与 cygwin 有关,但它们都超过 5 年了,并且使用 Windows Server 2003、1、2。有些人建议在this 之后添加权限,但我已经拥有它们,所以我对如何调试这个想法已经没有想法了。

我正在加入我的配置和下面这个错误的完整回调。以及在一切崩溃之前我在 Python 上尝试过的东西。如果您需要更多信息,请告诉我。


我的设置:


本地主机:Odroid XU4 - Linux

Ubuntu LTS 18.04 架构:arm7l OpenSSH_7.6p1 Python 3.6

远程主机:Windows 10 - 64 位

MobaXterm 赛格温

Python


在 python 上,我使用了 Paramikoscp 库。我尝试了以下命令:

from paramiko import SSHClient 
from scp import SCPClient

ssh=SSHClient()
ssh.load_system_host_keys()
ssh.connect(hostname, username=USER)

这使我成功连接。然后我尝试了两种通过 paramiko 和 scp 发送文件的方法。从那里我开始收到错误,现在,即使我使用终端发送命令,我也会收到上述错误。

os.system('scp dir/test.png USER@IP:"/cygdrive/c/Users/USER/Box/"')

并使用 scp:

def progress(filename, size, sent):
    sys.stdout.write("%s\'s progress: %.2f%%   \r" % (filename, float(sent)/float(size)*100))

scp = SCPClient(ssh.get_transport(), progress=progress)
scp.put(local_file, remote_destination)

完整回调


odroid@odroid:~$ scp -v dir/test.png USER@IP:"/cygdrive/c/Users/USER/Box/" 执行:程序 /usr/bin/ssh 主机 IP,用户 USER,命令 scp -v -t /cygdrive/c/Users/USER/Box/ OpenSSH_7.6p1 Ubuntu-4ubuntu0.1,OpenSSL 1.0.2n 2017 年 12 月 7 日 debug1:读取配置数据 /etc/ssh/ssh_config debug1:/etc/ssh/ssh_config 第 19 行:为 * 应用选项 debug1:连接到 IP [IP] 端口 22。 debug1:建立连接。 debug1:身份文件 /home/odroid/.ssh/id_rsa 类型 0 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_rsa-cert type -1 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_dsa 类型 -1 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_dsa-cert type -1 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_ecdsa 类型 -1 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_ecdsa-cert type -1 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_ed25519 type -1 debug1:key_load_public:没有这样的文件或目录 debug1:身份文件 /home/odroid/.ssh/id_ed25519-cert type -1 debug1:本地版本字符串 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.1 debug1:远程协议版本2.0,远程软件版本OpenSSH_7.1 debug1:匹配:OpenSSH_7.1 pat OpenSSH* compat 0x04000000 debug1:以“用户”身份验证 IP:22 debug1:已发送 SSH2_MSG_KEXINIT debug1:收到 SSH2_MSG_KEXINIT 调试1:kex:算法:curve25519-sha256@libssh.org debug1:kex:主机密钥算法:ecdsa-sha2-nistp256 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: 压缩: none debug1:kex:客户端->服务器密码:chacha20-poly1305@openssh.com MAC:压缩:无 debug1:期待 SSH2_MSG_KEX_ECDH_REPLY debug1:服务器主机密钥:ecdsa-sha2-nistp256 SHA256: ksdJSQNSèsQ987S8SKHGSJBSQqshdfqf87kjj debug1:主机“IP”已知且与 ECDSA 主机密钥匹配。 debug1:在 /home/odroid/.ssh/known_hosts:1 中找到密钥 debug1:在 134217728 个块后重新生成密钥 debug1:SSH2_MSG_NEWKEYS 已发送 debug1:期待 SSH2_MSG_NEWKEYS debug1:收到 SSH2_MSG_NEWKEYS debug1:在 134217728 个块后重新生成密钥 debug1:收到 SSH2_MSG_SERVICE_ACCEPT debug1:可以继续的身份验证:publickey、password、keyboard-interactive debug1:下一个认证方式:publickey debug1:提供公钥:RSA SHA256:JBSQqshdfqf87kjj/fqf87kjjG2EGCSQqshhDsd /home/odroid/.ssh/id_rsa debug1:服务器接受密钥:pkalg ssh-rsa blen 279 debug1:身份验证成功(公钥)。 已通过 IP 身份验证 ([IP]:22)。 debug1:通道 0:新的 [client-session] debug1:请求 no-more-sessions@openssh.com debug1:进入交互式会话。 debug1:承诺:网络 debug1:client_input_global_request:rtype hostkeys-00@openssh.com want_reply 0 debug1:发送环境。 debug1:发送命令:scp -v -t /cygdrive/c/Users/USER/ 1 [main] sshd 13224 C:\WINDOWS\SysWOW64\bsh\usr\sbin\sshd.exe: *** 致命错误 - 无法加载 C:\WINDOWS\system32\user32.dll,Win32 错误 1114 debug1:client_input_channel_req:通道 0 rtype 退出信号回复 0 debug1:client_input_channel_req:通道 0 rtype eow@openssh.com 回复 0 debug1:通道 0:免费:客户端会话,nchannels 1 debug1: fd 0 清除 O_NONBLOCK debug1: fd 1 清除 O_NONBLOCK 已传输:发送 2748,接收 2932 字节,0.3 秒 每秒字节数:发送 9984.6,接收 10653.1 debug1:退出状态 -1 失去连接

【问题讨论】:

【参考方案1】:

致命错误不是由于 cygwin sshd 而是由于 W10 中提到的 错误信息:

C:\WINDOWS\SysWOW64\bsh\usr\sbin\sshd.exe

Cygwin 安装在下面

$ cygpath -w /usr/sbin/sshd.exe
C:\cygwin64\usr\sbin\sshd.exe

要使用 Cgwin sshd,您需要删除或禁用 W10 作为服务 并启用 Cygwin。

https://cygwin.com/ml/cygwin/2018-06/msg00276.html

【讨论】:

这很奇怪,因为据说我的机器上没有安装 Windows sshd 服务(被我的公司禁用)。当我运行时:$ cygrunsrv -R sshd 我得到:> cygrunsrv:删除服务时出错:OpenService:Win32 错误 1060:> 指定的服务不作为已安装的服务存在。我确实在您提到的路径中找到了 sshd.exe。我尝试手动移除它,但我得到:> sssh_exchange_identification: read: Connection reset by peer 所以我把它打包并再次得到我原来的错误。可能邮件里有些东西我做的不对。 Windows 10 自带 ssh 是否还需要 Cygwin? @motorbaby,可能不在常规 Windows 上,但我正在公司笔记本电脑上工作,我的公司停用了所有 Windows 服务,包括 Windows OpenSSH。这就是我使用 Cygwin 和 MobaXterm 在 Windows 10 上创建服务器的原因。如果您知道另一种方法,我愿意尝试! @Dee 我在使用 SCP 而不是 SSH 时遇到问题,因此找到了您的问题。我想知道你的情况是否尝试不同的端口可以解决你的问题。见ssh.com/ssh/port

以上是关于SSH 密钥身份验证成功后,SSH 和 SCP 命令无法执行并显示错误消息:Win32 错误 1114的主要内容,如果未能解决你的问题,请参考以下文章

无法通过新 GitLab 容器上的 ssh 密钥进行身份验证

Capistrano 和几个 SSH 密钥

ssh密钥验证方式登录

使用密码短语(如 SSH 密钥)存储 Github / Gitea 身份验证令牌

无法使用密钥身份验证 ssh 到服务器

ssh-copy-id 找不到身份错误