【问题标题】:Multiline SSH remote script多行 SSH 远程脚本
【发布时间】:2019-04-19 18:12:49
【问题描述】:

我已经尝试了 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'

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

【问题讨论】:

    标签: bash docker ssh


    【解决方案1】:

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

    #!/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 可以相当直接地完成这组任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2017-08-02
      • 2021-02-13
      相关资源
      最近更新 更多