我正在尝试自动将文件从 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
- 蟒蛇 3.6
远程主机:Windows 10 - 64 位
- MobaXterm
- 赛格温
Python
在 python 上,我使用了Paramiko和scp库。我尝试了以下命令:
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 日
调试 1:读取配置数据 /etc/ssh/ssh_config
调试 1:/etc/ssh/ssh_config 第 19 行:应用选项 *
debug1:连接到 IP [IP] 端口 22。
debug1:已建立连接。
debug1:身份文件/home/odroid/.ssh/id_rsa type 0
debug1:key_load_public:没有这样的文件或目录
debug1:身份文件/home/odroid/.ssh/id_rsa-cert type -1
debug1:key_load_public:没有这样的文件或目录
debug1:身份文件/home/odroid/.ssh/id_dsa type -1
debug1:key_load_public:没有这样的文件或目录
debug1:身份文件/home/odroid/.ssh/id_dsa-cert type -1
debug1:key_load_public:没有这样的文件或目录
debug1:身份文件/home/odroid/.ssh/id_ecdsa type -1
debug1:key_load_public:没有这样的文件或目录
debug1:身份文件/home/odroid/.ssh/id_ecdsa-cert type -1
debug1:key_load_public:没有这样的文件或目录
调试1:身份文件/home/odroid/.ssh/id_ed25519类型-1调试1
:key_load_public:没有这样的文件或目录
调试1:身份文件/home/odroid/.ssh/id_ed25519-cert类型-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 为'USER'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305 @openssh.com MAC:压缩:无
调试1:kex:客户端->服务器密码:chacha20-poly1305@openssh.com MAC:压缩:无
调试1:期待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_1:
SERVICE_ACCEPT 收到
的验证可以继续: 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,在 0.3 秒内收到 2932 字节
每秒字节数:发送 9984.6,收到 10653.1
调试 1:退出状态 -1
丢失连接