如何SCP
绕过代理将文件从本地计算机复制到远程服务器?
当我使用scp -r <my_folder> <remote_user>@<remote_machine>:/home/test
它时出现以下错误信息:
ssh: connect to host <host_ip> port 22: Connection timed out
lost connection
我对这个主题还很陌生--任何帮助我都会很感激。
答案1
如果有防火墙阻止您,那么您必须通过代理,而不是试图绕过它。您没有指定代理的类型(SOCKS/HTTP?)。
如果代理是 SOCKS,那么您只需要一些可以“socksify”您的 scp 命令的程序,例如:
- 袜子,允许您通过挂钩系统调用来 socksify 特定程序;http://tsocks.sourceforge.net/
- tun2socks这是我开发的,它模拟了 tun 网络接口后面的虚拟路由器。设置起来有点困难,但它确实一切通过 SOCKS 代理。以下指南解释了如何使用 tun2socks 和 SSH -D 选项提供的 SOCKS 代理,但您应该忽略它关于 SSH 的所有内容,只需指定您的 SOCKS 代理即可。http://code.google.com/p/badvpn/wiki/tun2socks
另一方面,如果代理服务器仅支持 HTTP,情况就复杂得多。如果您很幸运,您的 HTTP 代理支持 CONNECT 命令,您可以使用该命令连接到 SSH 服务器。如果代理将 CONNECT 命令限制为特定端口号,则您必须将 SSH 服务器正在监听的端口号更改为 HTTP 代理允许的端口号。
你可以使用的一个软件是代理隧道:http://proxytunnel.sourceforge.net/intro.php
但是,如果您必须更改 SSH 服务器的监听端口(或者想要连接到除 SSH 服务器之外的任何服务器)该怎么办?在这种情况下,唯一的解决方案是通过您可以完全控制的中间服务器。因此,使用 SSH(通过 ProxyTunnel)连接到该中间服务器。然后您可以:
- 要么使用 SSH 的动态转发 (-D) 选项(在客户端上打开本地 SOCKS 服务器),然后使用 tsocks 或 tun2socks 通过此 SOCKS 接口获取 scp,如上所述,或者,
- 在您的计算机和您设法连接的中间服务器之间建立一个真实的 IP VPN(参见 ssh -w 选项)