Ruby net / ssh与特定主机挂起

时间:2014-02-27 12:35:34

标签: ruby-on-rails ruby ssh net-ssh

我遇到一个问题,如果我正在尝试创建与特定主机的ssh连接,则连接会挂起而不会超时。我尝试从rails控制台外部从同一台机器连接到这台主机,它可以工作,所以我假设这不应该是与路由/防火墙有关的任何东西。我还可以确认我有几个其他主机在不同的地方具有完全相同的操作系统配置,并且它们可以工作。

这是在调试模式下运行Net::SSH.start时的日志:

ssh = Net::SSH.start("1.2.3.4", "user", password: "password", verbose: :debug)
2014-02-27 13:17:43 +0100 [DEBUG] establishing connection to 1.2.3.4:22
2014-02-27 13:17:43 +0100 [DEBUG] connection established
2014-02-27 13:17:43 +0100 [INFO] negotiating protocol version
2014-02-27 13:17:43 +0100 [DEBUG] remote is `SSH-2.0-OpenSSH_4.3'
2014-02-27 13:17:43 +0100 [DEBUG] local is `SSH-2.0-Ruby/Net::SSH_2.6.8 i686-linux'
2014-02-27 13:17:43 +0100 [DEBUG] read 704 bytes
2014-02-27 13:17:43 +0100 [DEBUG] received packet nr 0 type 20 len 700
2014-02-27 13:17:43 +0100 [INFO] got KEXINIT from server
2014-02-27 13:17:43 +0100 [INFO] sending KEXINIT
2014-02-27 13:17:43 +0100 [DEBUG] queueing packet nr 0 type 20 len 1620
2014-02-27 13:17:43 +0100 [DEBUG] sent 1624 bytes
2014-02-27 13:17:43 +0100 [INFO] negotiating algorithms
2014-02-27 13:17:43 +0100 [DEBUG] negotiated:
* kex: diffie-hellman-group-exchange-sha1
* host_key: ssh-rsa
* encryption_server: aes128-cbc
* encryption_client: aes128-cbc
* hmac_client: hmac-sha1
* hmac_server: hmac-sha1
* compression_client: none
* compression_server: none
* language_client: 
* language_server: 
2014-02-27 13:17:43 +0100 [DEBUG] exchanging keys
2014-02-27 13:17:43 +0100 [DEBUG] queueing packet nr 1 type 34 len 20
2014-02-27 13:17:43 +0100 [DEBUG] sent 24 bytes

此时ssh连接暂停,可以保持这样15-30分钟。 不幸的是,我没有任何错误信息或任何其他内容,所以我对问题可能是什么一无所知。

一些规格:

ruby-2.0.0-p0
rails (3.2.13)
net-ssh-2.8.0

日志中的IP地址不是故意的真实IP。

有关问题可能是什么的任何建议?或者我可以查看一些其他日志或地点?我在SO之外发现了一个类似的问题,但它没有得到解决方案所以我试图在这里问...

1 个答案:

答案 0 :(得分:0)

我通过减少maximum transmission unit(MTU)来解决。我的环境是一些具体案例。我正在尝试从VMware虚拟机到Openstack实例的ssh。使用NET :: SSH通过And openstack needed smaller packet kitchen-openstack using连接fog。不确定这是否适合您,但尝试使用这些命令(假设在Ubuntu中):

  1. 检查你的MTU

    sudo netstat -i

  2. 您可以获得这样的输出,在第二列中,您可以查看MTU:

    Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg

    eth0 1500 0 9658 0 0 0 308 0 0 0 BMRU

    lo 16436 0 12952 0 0 0 12952 0 0 0 LRU

  3. 对于网络接口eth0,您可以尝试将MTU从1500减少到,例如1400,如下所示:

    sudo ifconfig eth0 mtu 1400

  4. 试试net ssh

    ssh = Net :: SSH.start(&#34; 1.2.3.4&#34;,&#34;用户&#34;,密码:&#34;密码&#34;,详细::调试)< / p>