当前位置: 首页 > 面试题库 >

SSH命令执行挂起,但交互式外壳程序功能正常

施锋
2023-03-14
问题内容

当我尝试使用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-因为我们的系统不允许chshzsh)。

令人反感的行:

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

通过首先检查交互式shell并退出(如果是)来解决:

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

因此,从本质上讲,因为shell正在执行zsh,所以它ssh在等待完成-从未发生。

我有点困惑为什么我.bashrc被调用-我以为这仅是用于交互式shell,但是各种初始化脚本的确切目的和顺序是我永远都不会学到的。

我希望这对其他具有exec启动脚本的人有用。

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



 类似资料:
  • 问题内容: 我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,并且对运行和完成命令运行良好。例如,这将在工作目录中运行带有参数“ myArg”的“ myProgram”: 但是,假设我想运行脚本或程序或具有交互式输入的内容(启动后提示我提供更多输入)。我可以使用与上面类似的代码在Java中执行此操作,还是需要其他方法?还是有一些图书

  • MOAC母链客户端使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC VNODE节点,cons

  • 我正在寻找一个解决方案,采取SSH连接,然后是Telnet连接到远程系统通过Java。由于只有使用telnet连接,我才能在远程计算机上执行该特定命令。 在大量浏览之后,我找到了这个答案“https://stackoverflow.com/questions/27146991/running-telnet-command-on-remote-ssh-session-using-jsch”,但是在执

  • 从v1.1.1开始,应用链客户端SCS也支持使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC

  • 我有一个CircleCI配置,它的末尾有一个部署脚本。该命令应该SSH到服务器中,移动到目录并执行NPM脚本。看起来是这样的: 这将引发以下错误: 这表示服务器上没有安装NPM,但它安装了。为了测试这一点,如果我单独运行这些命令,它们就可以工作。 那么这里有什么问题?

  • 问题内容: 我正在尝试通过paramiko运行交互式命令。该cmd执行尝试提示输入密码,但是我不知道如何通过paramiko的exec_command提供密码,并且执行挂起。如果cmd执行期望交互输入,是否可以将值发送到终端? 有谁知道如何解决?谢谢。 问题答案: 完整的paramiko发行版附带了很多很好的演示。 在demos子目录中,并有完整的交互式TTY示例,这可能对您的情况有些过分。 在您