SSH命令执行挂起,但交互式外壳程序功能正常
当我尝试使用ssh在远程服务器上执行命令时,ssh命令在exec request accepted
调试消息后挂起,并最终超时。
失败的命令:(ssh -v -v <username>@<server> uptime
也尝试过echo hello
等)
debug1: Authentication succeeded (publickey).Authenticated to <server> (<ip>:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 4 setting TCP_NODELAY
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug1: Sending command: uptime
debug2: channel 0: request exec confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: exec request accepted on channel 0
并无限期地挂起。
但是,当我在没有命令的情况下将ssh放入远程服务器时,我得到了一个交互式shell,一切都很好。
成功的命令: ssh -v -v <username>@<server>
输出:
debug1: Authentication succeeded (publickey).Authenticated to <server> (<ip>:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 4 setting TCP_NODELAY
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Welcome!
<prompt>%
...
有谁知道为什么交互式会话会成功但命令执行不会成功?
已经困扰我几个月了,因为我无法再使用统一来同步我的文件了(它曾经可以工作)。任何帮助,不胜感激。
回答:
问题确实出在我的登录脚本上,尽管与需要一个终端无关(我怀疑这并用-t
和-T
选项进行了测试)。问题是,我.bashrc
是运行的exec
(在这种情况下zsh
-因为我们的系统不允许chsh
到zsh
)。
令人反感的行:
test -f /usr/bin/zsh && exec /usr/bin/zsh
通过首先检查交互式shell并退出(如果是)来解决:
[ -z "$PS1" ] && returntest -f /usr/bin/zsh && exec /usr/bin/zsh
因此,从本质上讲,因为shell正在执行zsh
,所以它ssh
在等待完成-从未发生。
我有点困惑为什么我.bashrc
被调用-我以为这仅是用于交互式shell,但是各种初始化脚本的确切目的和顺序是我永远都不会学到的。
我希望这对其他具有exec
启动脚本的人有用。
顺便说一句-
其他两个答案都在正确的轨道上,所以我完全不确定是应该“回答”还是只评论他们的答案。如果在stackoverflow上回答我自己的问题在道德上是错误的,请告诉我,我会后悔的。谢谢其他答复者。
以上是 SSH命令执行挂起,但交互式外壳程序功能正常 的全部内容, 来源链接: utcz.com/qa/401732.html