https://www.cnblogs.com/sparkdev/p/6842805.html
远程执行命令
在远程的主机上执行 df 命令,然后直接把结果显示出来。整个过程就像是在本地执行了一条命令一样:
$ ssh nick@xxx.xxx.xxx.xxx "df -h"
一次执行多条命令呢?其实也很简单,使用分号把不同的命令隔起来就 OK 了:
$ ssh nick@xxx.xxx.xxx.xxx "pwd; cat hello.txt"
执行需要交互的命令
默认情况下,当你执行不带命令的 ssh 连接时,会为你分配一个 TTY。因为此时你应该是想要运行一个 shell 会话。
例如:
for host in ${agents[*]}
do
echo $host
ssh root@$host
done
此时终端会保持打开状态。
但是当你通过 ssh 在远程主机上执行命令时,并不会为这个远程会话分配 TTY。此时 ssh 会立即退出远程主机,所以需要交互的命令也随之结束。
好在我们可以通过 -t 参数显式的告诉 ssh,我们需要一个 TTY 远程 shell 进行交互!
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。
for host in ${agents[*]} do echo $host ssh -t root@$host "cd /data/tmp; ps -ef; top" done
但此时最后一个命令必须要是使用终端的命令,例如top, vim之类,否则还是会退出终端的。