远程执行命令时SSH挂起

  • 客户端:OpenSSH_5.1p1 Debian-5ubuntu1(Ubuntu 9.04)
  • 服务器:OpenSSH_5.1p1 Debian-5(Proxmox 2.6.24-7-pve)

我使用SSH在服务器上远程执行命令(Nagios的模块check_by_ssh)。 但是,当尝试执行命令时,SSH会不时挂起。 我可以通过SSHlogin到服务器,但不执行简单的'ls'。 它似乎阻止来自同一个IP地址的所有客户端。 身份validation不是问题,可能是由SSH密钥或密码造成的。

ssh -l root -p 2222 server.domain.tld 'ls' 

这里的客户端debugging信息

 debug1: Entering interactive session. debug2: callback start debug2: client_session2_setup: id 0 debug1: Sending environment. debug3: Ignored env ORBIT_SOCKETDIR *** skipping approx 40 env var ignored debug1: Sending command: ls debug2: channel 0: request exec confirm 1 

它挂在那里。 然后在随机的时间之后,它再次运作(不做任何事情)。 杀死服务器上的所有sshd进程似乎也起作用。 它从一个腻子工作。 由于ISP的反向DNS问题,我看到有些人遇到这样的麻烦,但在这里似乎并不是这样。

它可以工作几个小时,然后不能工作半小时左右。

什么可以解释这种行为?

编辑:似乎与-t或-T选项,ssh不会挂起,但我不能通过这些选项中的一个在nagios的check_by_ssh

我有想法从这个博客解决我的问题。 我也有非常有趣的问题

我有一个L2vpn链路(供应商提供了MPLS L2)来连接我的HO和分支机构。 所有ping连通性testing工作正常。 当我用SSH从deb到debian服务器到客户端的debian服务器时,我可以login到该服务器,但远程sshlogin到分支服务器后,我无法运行ifconfig,htop或ps -ef命令。 当我应用thoses命令会话冻结。 如果我使用腻子从windows pc检查它的结果是一样的。 有趣的是,当我使用腻子经理和ssh通过该应用程序从赢7电脑它工作正常。 在阅读这个博客后,我从服务提供商处获得了mpls mtu信息,并在HO的源debian服务器接口上尝试了与不同mtu大小相同的场景。 最后,从1440年到1470年的MTU大小工作正常,默认情况下MTU大小1500不工作。 结论:两端的debian服务器的mtu大小是默认的,即1500,但在服务提供商MPLS L2vpn mtu大小错过匹配的中间path。 谢谢

您可能正在服务器端networking上触发一个SSH速率限制器。 这是一种防火墙技术,可以在短时间内阻止新连接请求太多的IP地址。 然后源IP在指定的时间内被阻塞。

我有同样的问题,今天终于发现了什么是造成这个问题(至less对我来说)。 这也可以帮助你。

当sshbuild立会话时,IP头中的DSCP标志字段被设置为0x0。 如果build立一个交互式会话,它被设置为0x10(16),并且如果你build立一个非交互式会话,它被设置为0x8(8)。 ssh客户端使用setsockopt()系统调用来设置DSCP字段(我在源代码中进行了validation)

在我的雇主的一个VPN上的错误configuration是丢弃DSCP为0x8的数据包,导致所有非交互式的sshstream量也被丢弃。 为了validation这是造成丢弃的DSCP字段,我用ssh服务器上的iptables来强制将DSCP字段设置为0x16,并testing了我的非交互式stream量(ssh ls,你尝试的是同样的东西)之后。 你也可以尝试同样的事情,看看是否你的会议挂起。

要将scp服务器上的所有传出sshstream量的DSCP设置为0x10,请运行:

$ sudo iptables -t mangle -A OUTPUT -p tcp –sport 22 -j DSCP –set-dscp 0x19

这是在一个6.5盒。

检查服务器端的ssh。 你可以“跨越”创build的进程/邮件sshd进程,看看它调用了什么系统调用。 这应该给你更多的信息在做什么。

也可以尝试“touch / tmp / randomfile”,看看挂起是在创build后还是之后发生的。

你有没有检查,以确保没有任何PAM错误? 只是因为它从腻子工作并不意味着authentication是不是问题。

遇到MTU问题时我也经历过。 使用ciscos ipsec客户端到站点,然后在其上打开openvpn。 基本上任何大小为1500字节的数据包都会冻结会话。

我有类似的问题。 客户端和服务器的MTU都是9000.当我把客户端的MTU降到1500时,问题就消失了。

可能是ICMP pathMTU发现问题 。

在我们的原因中,所有ICMP参数都被服务器端的防火墙阻止。 降低客户端MTU(通过本文build议)解决了这个问题的临时性。 但是,在服务器端允许所有(但是redirect)ICMP参数之后,问题就消失了。

用户shell环境中是否存在任何可能导致死锁或延迟打开的问题? -t / -T解决方法和closures其他ssh会话清理它听起来像是获取锁的假设是唯一的过程。