Linux Bash-将2个ssh调用合并为1个(使用可选和强制命令)

Linux Bash-将2个ssh调用合并为1个(使用可选和强制命令),linux,bash,ssh,Linux,Bash,Ssh,我有一个包含2个ssh命令的脚本。SSH脚本使用SSH登录到远程服务器并删除docker映像 ssh person@someserver.com 'set -x && echo "Stop docker images" ; sudo docker stop $(sudo docker ps -a -q) ; sudo docker rmi -f $(sudo docker images -q) ; sudo docker rm -f $(sudo doc

我有一个包含2个
ssh
命令的脚本。SSH脚本使用SSH登录到远程服务器并删除docker映像

ssh person@someserver.com 'set -x &&

   echo "Stop docker images" ;
   sudo docker stop $(sudo docker ps -a -q) ;
   sudo docker rmi -f $(sudo docker images -q) ;
   sudo docker rm -f $(sudo docker ps -a -q)'
注意
的用法以分离命令(我们不关心一个或多个命令是否失败)

第二个
ssh
命令使用ssh登录到同一服务器,获取docker compose文件并运行docker

ssh person@someserver.com 'set -x &&

   export AWS_CONFIG_FILE=/somelocation/myaws.conf &&
   aws s3 cp s3://com.somebucket.somewhere/docker-compose/docker-compose.yml . --region us-east-1 &&

   echo "Get ECR login credentials and do a docker compose up" &&
   sudo $(aws ecr get-login --region us-east-1) &&
   sudo /usr/local/bin/docker-compose up -d'
注意使用
&&
来分离命令(这一次我们在获取退出代码时会注意一个或多个命令是否失败,即
exitCode=$?


我不喜欢这样一个事实,我必须把它分成两部分,所以我的问题是,这两部分bash命令能否组合成一个SSH调用(同时使用
&&&
组合)?

尽管可以将一组命令作为简单的单引号字符串传递,但我不建议这样做,因为:

  • 内部引号应该转义
  • 在文本编辑器中看起来像字符串的代码很难读取(和维护!)
我发现最好将脚本保存在单独的文件中,然后将它们作为标准输入传递到
ssh

cat script.sh | ssh -T user@host -- bash -s -
以相同的方式执行多个脚本。只需连接更多脚本:

cat a.sh b.sh | ssh -T user@host -- bash -s -
如果仍要使用字符串,请改用:


ssh-Tuser@host--这很有效,谢谢。不过在将来,我会使用@Ruslan的建议,即使用单独的脚本,因为如果它们的大小变大,这会更有意义。感谢您的回复-我将在将来使用它。另一种方法是:
sshuser@host“bash-s”
@Zlemini,几个脚本怎么样?对于多个脚本,使用For循环,类似这样:
代表a.sh b.sh中的i;做sshuser@host“bash-s”<$i;完成
或更简单:
sshuser@host'bash-s'<{a,b}.sh
cat a.sh b.sh | ssh -T user@host -- bash -s -
ssh -T user@host -- <<'END_OF_COMMANDS'
# put your script here
END_OF_COMMANDS