通过 HTTP 代理进行 SSH 连接

通过 HTTP 代理进行 SSH 连接

典型场景:我尝试使用 corkscrew 通过公司 HTTP 代理 SSH 到远程机器,然后得到:

ssh_exchange_identification: Connection closed by remote host

显然,发生这种情况的原因有很多 - 代理可能不允许这样做,远程机器可能没有运行 sshd,等等。

因此,我尝试通过 telnet 手动建立隧道:

$ telnet proxy.evilcorporation.com 82
Trying XX.XX.XX.XX...
Connected to proxy.evilcorporation.com.
Escape character is '^]'.
CONNECT myremotehost.com:22 HTTP/1.1

HTTP/1.1 200 Connection established

所以,如果我没有记错的话...看起来这种联系是在职的

那么,为什么它不能通过螺旋钻来工作呢?

ssh -vvv [email protected] -p 22 -o "ProxyCommand corkscrew proxy.evilcorporation.com 82 myremotehost.com 22"
OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Executing proxy command: exec corkscrew proxy.evilcorporation.com 82 myremotehost.com 22
debug1: permanently_set_uid: 0/0
debug1: permanently_drop_suid: 0
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: identity file /root/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6p1 Ubuntu-2ubuntu1
ssh_exchange_identification: Connection closed by remote host

答案1

您可能正在尝试通过代理进行隧道传输螺旋状尚未设计/测试/调试。Corkscrew 的主页声明(逐字):

Corkscrew 已通过以下 HTTP 代理测试:

手套

缓存流

垃圾克星

乌贼

Apache 的 mod_proxy

如果您让它与其他代理一起工作,请给我发电子邮件

在您的情况下,您知道运行哪个代理吗?

答案2

您可以通过直接在命令行上运行代理命令来检查 corkscrew 是否正常工作。在您的例子中,运行

corkscrew proxy.evilcorporation.com 82 myremotehost.com 22

应该产生类似的输出

SSH-2.0-OpenSSH_6.7

即来自远程服务器的 SSH 协议横幅。如果这不起作用,则您的代理和/或 ssh 服务器存在问题。

相关内容