奇怪的 SSH 问题,ssh 与 -t 一起工作但没有它会冻结

Mis*_*erG 13 shell login ssh

当我ssh进入我的一台服务器时,它似乎登录,但在给我提示 ( message debug2: shell request accepted on channel 0 is the last log entry)之前挂起。

虽然奇怪的事情是ssh -t "/bin/bash"ssh没有时有效。

到目前为止我发现了什么

  • 我可以正常从同一地理位置的服务器登录
  • 如果我ssh -t '/bin/bash'- 我可以从任何位置完美登录。
  • 如果我使用rsync 服务器,它似乎可以工作,然后锁定
  • 如果我rsync 服务器使用,它可以正常工作

我试过的

  • 删除或更改所有登录选项.profile.bashrc /etc/profile
  • ssh_config 和/或 sshd_config从运行良好的相同服务器更改为一个
  • 我检查了路由
  • 我让网络专家检查tcpdump无济于事(尽管似乎确实有很多重传)

我真的想不出别的了

除了狡猾的网卡驱动程序/固件。

Emm*_*uel 5

这可能来自配置文件中的问题。
当你连接ssh -t /bin/bash 你的shell会不会“登录”,它不会源/etc/profile,也没有~/.profile~/.bashrc...

因此,连接后,将 shell 置于调试模式,然后获取每个文件以查找内部阻塞的内容:

set -x 
. /etc/profile 
...and so on
Run Code Online (Sandbox Code Playgroud)

编辑

请注意,我错了,.bashrc 文件将由任何交互式 shell 获取(因此这里只有配置文件、profile.d 文件很重要)。

尝试列出连接过程的不同阶段。像这样的东西

1) ssh 连接 (config,...)
2) 登录 (PAM, tty, wtmp, ...)
3) 启动 shell (profile, home dir access, ...)

要检查 (1),您可以在调试模式下启动 sshd 守护进程。为此,您需要启动另一个 sshd,侦听专用端口(不在端口 22 上,因此无需停止常规 sshd 守护程序)。

# /usr/sbin/sshd -p 2222 -ddd 
Run Code Online (Sandbox Code Playgroud)

该 sshd 将只接受一个连接并且不会进入后台。打开另一个终端并连接到该 ssh 会话。

# ssh -vvv -p 2222 user@host
Run Code Online (Sandbox Code Playgroud)

您可以将收到的消息与同一品牌的另一台服务器中的消息进行比较。然后你就会知道问题是否出在 ssh 端。

(-ddd 和 -vvv 是最大调试级别,您可以对其进行调整)

我得到了那个链接,更详细。