SSH到服务器,执行命令并维护连接


12

我想编写一个脚本来打开带有不同选项卡的终端,使用ssh每个选项卡登录到服务器并在每个选项卡中执行命令。例如:htop

下面的脚本将打开一个终端,其中包含所有已在服务器上登录的4个选项卡。但是如果我尝试htop在该cmd=行中添加命令,它将不再起作用...

#bin/bash

tab="--tab"
cmd="bash -c 'ssh user@host';bash"
foo=""

for i in 1 2 3 4; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

我已经尝试过了...

cmd="bash -c 'ssh user@host htop';bash"

...因为ssh --help说的语法ssh是:

用法:ssh [user @]主机名[命令]

Answers:


14

最简单的形式:

ssh -t user@host "command; bash"

-t是这里的关键部分。它强制主机为进程分配虚拟终端,从而使其保持打开状态。

如果只想在服务器负载上运行htop,则可以bash在最后省略,但这确实意味着如果退出htop,您将退回到本地终端。


我尝试了cmd =“ bash -c'ssh -t user @ host htop'; bash”。它有效,但是如果我退出htop,我会退回到本地终端,并且我不希望发生这种情况
Red

1
@Red检查您的报价-到处都是-您需要将htop和bash分组在一起,以便它们都在远程服务器上运行。bash -c 'ssh -t user@host "htop;bash"'会更好,但我不明白为什么您首先要尝试用bash包装器将其油炸。不需要-您只在本地运行一个命令。
奥利

谢谢,现在它可以与cmd =“ ssh -t user @ host htop; bash”一起使用
红色

一个很好的答案,但是为了不终止,必须使用比bash更好的东西。
mc0e 2014年

@ mc0e取决于您要做什么。这个问题更多的是关于在运行命令后获得有用的shell。如果你只是想暂停,你可以代替bashread
奥利(Oli)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.