Bash for a remote on a server

时间:2016-11-30 20:52:47

标签: linux bash scripting

我试图通过远程服务器上的bash脚本运行多个命令。具体来说,要在远程服务器上运行的for循环给我带来了问题。我怀疑是因为我不知道如何正确转义字符或使用$()。

以下是代码。

ssh (user)@(server) <<EOF
sudo su - (username)
whoami
'for e in $(`ls -lrt /usr/jboss/jbosseap | awk '{print $9}' | grep multichannel`);
do
echo "$e";
done'

出于显而易见的原因删除用户名和服务器名。只需专注于for循环。当我运行for循环命令行(没有$())时它工作正常。只是不确定如何将其嵌套在远程调用中。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果你有一个复杂的脚本,你试图在ssh上运行,你最好将该脚本放在一个文件中并将该文件传输到ssh中,如:

cat remote_script.sh | ssh user@host

或:

cat remote_script.sh | ssh user@host sudo -u username

现在您不必担心 N 级别的转义。

答案 1 :(得分:0)

您可以按以下方式运行它。

此处的文件“列表”包括您的节点列表,并且脚本应出现在所有节点中

for i in $(cat list ) ;do ssh -o StrictHostKeyChecking=no $i "/path/your_script" ;done