无法通过 SSH 向瞻博网络防火墙发送命令

Mas*_*imo 6 ssh juniper tty

我有一些需要管理的瞻博网络 SSG 防火墙,我希望能够从一些监控脚本向它们发送命令。我使用公钥配置了 SSH 访问,并且我能够自动登录到防火墙。

当我以交互方式运行 SSH 时,一切正常:

$ssh <firewall IP>
FIREWALL-> <command>
<command output>
FIREWALL-> exit
Connection to <firewall IP> closed.
$
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从命令行运行命令时,它不起作用:

$ssh <firewall IP> <command>
$
Run Code Online (Sandbox Code Playgroud)

当然,这在向远程 Linux 机器发送命令时工作正常:

$ssh <linux box IP> <command>
<command output>
$
Run Code Online (Sandbox Code Playgroud)

为什么会这样?以交互方式运行 SSH 与指定要在 SSH 命令行上运行的命令有什么区别?


更新:

它也适用于 Cisco 路由器。只有这些瞻博网络防火墙似乎以这种方式运行。

从 SSH 的调试输出来看,连接似乎已正确建立,但 Juniper box 在发送命令时回复 EOF,而 Linux box 回复实际命令输出:

Linux:

debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug1: Sending command: uptime
debug2: channel 0: request exec confirm 0
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 131072
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
 16:44:44 up 25 days,  1:06,  3 users,  load average: 0.08, 0.02, 0.01
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug2: channel 0: rcvd close
debug2: channel 0: close_read
debug2: channel 0: input open -> closed
debug2: channel 0: almost dead
debug2: channel 0: gc: notify user
debug2: channel 0: gc: user detached
debug2: channel 0: send close
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.1 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0
debug1: Exit status 0
Run Code Online (Sandbox Code Playgroud)

杜松:

debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug1: Sending command: get system
debug2: channel 0: request exec confirm 0
debug2: callback done
debug2: channel 0: open confirm rwindow 2048 rmax 1024
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd close
debug2: channel 0: close_read
debug2: channel 0: input open -> closed
debug2: channel 0: almost dead
debug2: channel 0: gc: notify user
debug2: channel 0: gc: user detached
debug2: channel 0: send close
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.2 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0
debug1: Exit status 1
Run Code Online (Sandbox Code Playgroud)

sen*_*nfo 1

当您指定要运行的命令时,SSH 不会分配伪 TTY。尝试添加“-t”选项来覆盖它。