【问题标题】:"ssh example.com" hangs but "ssh example.com bash -i" does not“SSH example.com” 挂起,但 “SSH example.com的bash -i” 不
【发布时间】:2011-01-15 21:48:16
【问题描述】:

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

通过我的大学互联网连接,SSH 到我的机器(“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”,我会立即登录。

【问题讨论】:

    标签: login ssh netcat


    【解决方案1】:

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

    当您请求常规 ssh 终端时,ssh 将 TCP 数据包类型的服务 (ToS) 设置为“交互式”。我家中的路由器阻止了这些数据包类型!

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

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

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

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

    【讨论】:

      【解决方案2】:

      OpenSSH 5.7 开始,您只需将其添加到您的 ssh 配置文件(~/.ssh/config 或 /etc/ssh/ssh_config):

      主持人 * IPQoS 0x00

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

      【讨论】:

        【解决方案3】:

        我也遇到了同样的问题。尝试使用不同的 ssh 客户端登录以获取更多信息。 linux 命令行客户端没有返回任何有用的消息,而 Putty 则返回“服务器拒绝分配 pty”。我用 mkdir /dev/pts 和 mount -a 修复了它。首先我不太确定它是如何搞砸的。

        顺便说一句,bash -l 应该像一个登录 shell,因此您应该能够相当容易地证明 Peter Westlake 的建议在您的情况下正确或不正确。

        【讨论】:

          【解决方案4】:

          这两种情况的区别在于“bash -i”不会给你一个登录shell,而只是运行ssh。您可以“man bash”了解“登录 shell”是什么的详细信息,但主要是它运行 /etc/profile 和您的 .bash_profile。查看这些文件中是否存在可能导致问题的任何内容。

          【讨论】:

            【解决方案5】:

            可能服务器没有 ptys。

            【讨论】:

              猜你喜欢
              • 2011-01-16
              • 1970-01-01
              • 2018-09-21
              • 1970-01-01
              • 2012-04-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多