2011-05-08 188 views
20

当我试图用ssh在远程服务器上执行命令时,ssh命令在exec request accepted调试消息后挂起,并最终超时。SSH命令执行挂起,尽管交互式shell功能正常

失败的命令: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 [email protected] 
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 [email protected] 
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>% 
... 

有没有人一个想法,为什么一个交互式会话是成功的,但对命令执行不?

几个月来我一直困扰着我,因为我无法再一次同步我的文件(它曾经工作过)。任何帮助非常感谢。

+0

我不知道回答你的问题,但我有一个想法。也许在SSH客户端或SSH服务器上存在配置错误。尝试一个不同的客户端到同一台服务器,然后尝试使用同一个客户端到不同的服务器,然后让我们看看哪一个工作。 – pts 2011-05-08 19:01:27

+0

以前在计算器上发布了一些类似的问题:http://www.google.com/search?q=ssh+command+execution+hangs – 2011-05-08 19:05:13

+0

这不是SSH配置问题 - 它来自不同的客户端。服务器配置已锁定,但由其他用户验证。这里发布的其他问题并不完全相同,我仔细看过他们。 – 2011-05-09 10:19:53

回答

24

的问题的确是我的登录脚本,虽然没有与要求终端(我怀疑,并与-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 

所以,本质上,这是因为外壳是execing为zshssh在等待这完成 - 从未发生过。

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

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

顺便说一句 - 其他两个答案都在正确的轨道上,所以我完全不确定我是应该“回答”还是只是评论他们的答案。如果回答我自己的问题在道德上错误在stackoverflow,让我知道,我会做悔改。谢谢其他答复者。

+1

.bashrc =每当shell被调用并连接到终端时调用。 .bash_profile仅在登录时调用。的区别是模糊的,但通过回波容易地检查“回声我登录”>〜/ .bash_profile中并执行使用ssh的命令。这样,你可以看到,如果直接执行命令通过SSH或不使外壳登录shell。 – Mel 2011-05-11 15:32:16

+0

我运行到完全相同的问题用哦,我的-zsh的,我不得不插入'[-z “$ PS1”] &&之前'$源ZSH/OH-MY-zsh.sh' return'权,以避免SSH使用另一台主机作为代理时吊 – 2016-06-08 13:51:29

2

您在你的shell启动文件(我假设您提示~/.cshrc;在非交互式会话,~/.login不应该的问题)的命令需要出于某种原因终端。

4

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

2

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

0

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

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

我找到的解决方案是在authorized_keys文件。我不得不从我信任的钥匙删除命令=“在/ usr /斌/ bash的”前缀...