无法将文件从 Linux 的 Windows 子系统传输到远程服务器

无法将文件从 Linux 的 Windows 子系统传输到远程服务器

我目前正在使用 Windows 10 笔记本电脑。我在其中安装了 ubuntu 子系统(而不是 PUTTY)来访问远程服务器。当我从 Windows 开始菜单启动 ubuntu 子系统时,它会打开命令提示符 user@PC0BCD-PC

远程服务器也是Linux服务器。

另外我连接了VPN,如果不连接VPN的话,就无法登录远程服务器。

因此,我想要做的是将文件从本地 Windows Ubuntu 子系统传输到远程服务器

因此,我尝试了以下命令并收到如下所示的错误

scp /mnt/c/Users/test/Downloads/DC_cond.csv [email protected]:/home/test/cond_occ.csv

ssh: connect to host 172.XX.YYY.Z port 22: Resource temporarily unavailable
lost connection

/mnt/c/Users/....表示我本地系统中的路径,而[email protected]表示我的远程服务器地址。

当我telnet 172.XX.YYY.Z 22在 WSL 中输入时,它只会显示Trying 172.XX.YYY.Z,而当我通过 SSH 进入远程服务器并输入时telnet 172.XX.YYY.Z 22,它会为 telnet 命令生成输出

无法将文件从远程服务器传输到本地系统。

能帮我吗?

答案1

从评论中,我们发现“核心问题”是,当 时,您可以访问服务器ssh,并且从那里您可以scp。但是,当您尝试scp从 VPN 上的 WSL 会话直接进入服务器时,却无法访问。

对于未来的读者来说,当执行以下操作时,可能有几个(其他)原因导致scp不起作用ssh

  • 可能存在服务器问题。libssh2据报道,运行 特定版本的某些服务器存在 问题scp,尽管该问题已修复一段时间,因此这种情况很少见。

  • 服务器上的 shell 启动文件可能会发出一些文本。这在交互式会话中有效ssh,但会导致出现问题scp。但是,您看到的错误消息与此并不完全一致。

事实证明,您似乎使用了 的主机名ssh,但尝试使用 的 IP 地址scp。主机名有效,因为您的 中有以下内容~/.ssh/config

Host server_1
Hostname 172.xx.yyy.z
User test
ProxyCommand ssh -q -a pitunnel -W %h:%p
TCPKeepAlive yes

这允许ssh server_1使用ProxyCommand连接通过VPN 上的服务器名为pitunnel server_1

虽然您已经发现只需使用server_1主机名即可scp使其工作(因为它也读取相同的内容~/.ssh/config),但您也可以修改配置以允许访问主机名IP。只需将第一行改为:

Host server_1 172.xx.yyy.z

这告诉sshscp使用下面的设置两个都主机名和 IP。

还有一点需要注意。隐藏 IP 地址的做法很聪明,但在这种情况下可能没有必要。如果xx介于 16 和 31 之间,则 IP 地址位于所谓的“私人互联网”网络上。它就像192.168.1.1您在家用路由器上看到的地址类型一样。 每个人可以使用相同的 IP 范围,因为它们无法通过公共互联网进行路由。

这就是为什么你必须连接到 VPN 并使用代理来访问它。它一开始就不在公共互联网上。

答案2

openssh-server服务器上可能未安装该程序,或者端口 22 可能被服务器或 VPN 路由器防火墙保护。

要检查后者,您可以更改服务器上 openssh-server 配置中使用的端口,只需将端口配置添加/替换为/etc/ssh/sshd_config

Port 80

或您确定没有被防火墙阻止的任何端口。

比使用ssh -p 80 <some_user>@<some_ip>

您也可以使用任何其他端口(只需将 80 换成另一个合理的端口),但端口 80 很可能不受限制。

如果您已经有绑定到端口 80 的服务,则更改配置时会遇到麻烦。要列出服务器上所有使用的端口,您可以使用ssnetstat按照 Pierre ALBARÈDE 在其评论中所述。

相关内容