SSH命令执行挂起,虽然交互式shellfunction正常

当我试图用ssh在远程服务器上执行命令时, exec request accepteddebugging消息后,ssh命令挂起,最终超时。

失败的命令: 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 

在那里,它无限期地挂起。

当我没有一个命令sshsh到我的远程服务器,但是,我得到一个交互式的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 – 因为我们的系统不允许chshzsh )。

违规行:

 test -f /usr/bin/zsh && exec /usr/bin/zsh 

首先检查交互式shell并退出,如果是的话解决:

 [ -z "$PS1" ] && return test -f /usr/bin/zsh && exec /usr/bin/zsh 

所以,基本上,因为shell正在使用zshssh正在等待这个完成 – 这从来没有发生过。

我有点困惑,为什么我的.bashrc被调用 – 我认为这只是交互式shell,但各种init脚本的确切目的和顺序是我不认为我将永远学不会。

我希望这对那些在启动脚本中拥有某种exec人有用。

顺便说一句 – 另外两个答案是在正确的轨道上,所以我完全不确定我是否应该“回答”或只是评论他们的答案。 如果回答我自己的问题在道德上是错误的,请告诉我,我会做悔改。 谢谢其他答复者。

您的问题很可能在于您的shell启动或shell注销脚本。 不知道里面有什么,很难猜到实际的问题。

检查你的shell启动文件中的命令(我会假设你的提示符是~/.cshrc ;在非交互式会话中, ~/.login应该不重要),因为某些原因需要终端。

我最近遇到了同样症状的问题,但确定问题在我的登录脚本中不是问题。 相反,我的本地.ssh/config文件配置了我尝试复制到的主机的RequestTTY force

在解决其他新问题之后,我在Fedora服务器22上遇到了这个问题。

ssh -t ziimp / bin / true是好的,但不是ssh ziimp / bin / true,所有我的git + ssh和scp都被锁定了。

我找到的解决方案是在authorized_keys文件。 我必须从我的可信密钥中删除command =“/ usr / bin / bash”前缀…