多行SSH远程脚本

时间:2019-04-19 10:01:20

标签: bash docker ssh

我已经尝试了2个小时,将此SSH远程执行的命令重写为多行形式,以使其更具可读性,但是每次遇到问题时,我都会这样做。我尝试了类似问题中所述的多种方法,但我只是对BASH感到厌倦。我正在尝试

echo "Deploying $1 to remote"
sudo ssh -i ../keys/key.pem username@$2 '
    id=$(docker ps -a -q -f name=$1); if [ -n "$id" ]; then docker rm --force $1; fi; 
    docker run -d --network host -v /var/log/$1/:/var/log/$1/ 
        -e SERVER_PORT=80 
    --name $1 username/image:$1'

我想使用一些远程创建的参数($id远程运行​​docker映像,并在执行该脚本之前$1, $2进行本地扩展。

1 个答案:

答案 0 :(得分:2)

如果将其作为独立脚本编写,您可能会发现它更容易编写:

#!/bin/sh
container="$1"
id=$(docker ps -aq -f name="$container")
if [ -n "$id" ]; then
  ...
fi
...

手动在目标系统上运行此命令,以确保它可以执行您想要的操作。

一旦有了,就可以复制脚本并在两个单独的命令中运行它:

echo "Deploying $1 to remote"
scp -i ../keys/key.pem launch-container.sh "username@$2:/tmp/launch-container.sh"
ssh -i ../keys/key.pem "username@$2" sh /tmp/launch-container.sh "$1"

您还可能会研究专门为此类任务而构建的各种系统自动化工具。我偏爱Ansible,因为它不需要专用的服务器,不需要像显示的那样通过ssh进行工作;它有a set of Docker-related commands可以相当直接地完成这组任务。