“ssh example.com”挂起,但“ssh example.com bash -i”没有

时间:2010-02-11 21:20:26

标签: login ssh netcat

每天我都会遇到一个非常奇怪的现象。

从我的大学互联网连接,sshing到我的机器(“ssh example.com”)工作没有任何问题。

从我的家庭adsl,“ssh example.com”我的控制台卡住了这条消息:

debug1: Server accepts key: pkalg ssh-rsa blen 533
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.

有时它可能会让我进入,但在大多数情况下不会。 有趣的是,如果我执行“ssh example.com bash -i”,我会立即登录。

5 个答案:

答案 0 :(得分:11)

我终于找到了问题的根源。它与SSH类型的服务(ToS)TCP数据包有关。

当您要求常规ssh teminal时,ssh将TCP数据包服务类型(ToS)设置为“interactive”。我住所的路由器阻止了这些数据包类型!<​​/ p>

使用netcat,隧道TCP数据包不会获得任何类型的服务指令。因此,如果通过netcat隧道传输所有ssh流量,则将TCP数据包的ToS重置为默认值。

在.ssh / config中,您必须设置:

Host *.example.com
    ProxyCommand nc %h %p

因此,每次尝试ssh到example.com时,都会调用netcat并对数据包进行隧道传输。

答案 1 :(得分:9)

OpenSSH 5.7开始,你可以将它添加到你的ssh配置文件中(〜/ .ssh / config或/ etc / ssh / ssh_config):

Host *
  IPQoS 0x00

这是解决Asterios问题的更直接的解决方法。

答案 2 :(得分:1)

我刚遇到同样的问题。尝试使用其他ssh客户端登录以获取更多信息。虽然linux命令行客户端没有带回任何有用的消息,但Putty回来时“服务器拒绝分配pty”。我用mkdir / dev / pts和mount -a修复它。如何把它弄得一团糟,我不太确定。

顺便说一下,bash -l应该像登录shell一样,所以你应该能够很容易地证明Peter Westlake的建议是正确的或不正确的。

答案 3 :(得分:0)

两种情况之间的区别在于“bash -i”不会为您提供登录shell,而只是运行ssh。您可以“man bash”获取“登录shell”的详细信息,但主要的是它运行/ etc / profile和.bash_profile。查看那些可能导致问题的文件。

答案 4 :(得分:0)

也许服务器没有ptys。