我目前正在使用 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
这告诉ssh
并scp
使用下面的设置两个都主机名和 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 的服务,则更改配置时会遇到麻烦。要列出服务器上所有使用的端口,您可以使用ss
或netstat
按照 Pierre ALBARÈDE 在其评论中所述。