Linux Bash 脚本远程服务器

Linux Bash 脚本远程服务器

我有一个 Bash 脚本,我想执行如下命令:

  1. 下载阿帕奇服务
    sudo apt-get install apache2 -y > /dev/null 2>&1
    
  2. 下载mysql服务
    sudo apt install mysql-server -y > /dev/null 2>&1
    

但是这个 Bash 脚本不在将执行这两个命令的服务器之外。

例如,Bash 脚本文件位于服务器 192.168.10.2 上,远程服务器 IP 为 172.143.20.4

脚本将通过 ssh 自动连接到该服务器(无提示密码),但不使用 sshpass(因为命令在分配 Bash 脚本文件的服务器上不可用)。

我在没有提示的情况下尝试了多种登录方式(全部失败):

我怎样才能做到这一点(自动登录并执行这两个命令)?

答案1

更新:重新阅读问题后,很明显我错过了关于中间有服务器的部分。我会将安装脚本移至我自己的计算机,并使用 ProxyJump 参数应用它。更新答案以反映这一点。所需要做的就是将公钥添加到服务器。

我个人喜欢只执行一件事,因此每当需要时 - 我将所有事情放入脚本中并执行所述脚本。所以可能有一个脚本~/git/server-provisioning/script-to-upload.sh

#!/usr/bin/env bash 

set -euo pipefail
IFS=$'\n\t'

apt-get install -y apache2
apt-get install -y mysql-server

你可以有一个~/git/server-provisioning/setup-remote-server.sh脚本:

declare scriptFile="~/git/server-provisioning/script-to-upload.sh"
[ -x "$scriptFile ] || chmod 700 "$scriptFile"
scp -o StrictHostKeyChecking=no "scriptFile" "$1":/tmp/
echo "myHardPassword" | \
    ssh "$1" -tt \
        -o StrictHostKeyChecking=no \
        "sudo bash /tmp/script-to-upload.sh > /dev/null 2>&1"

并将您的主机放入~/.ssh/config

Host server1
    Hostname 172.143.20.4
    ProxyJump 192.168.0.2
    User root

使~/git/server-provisioning/setup-remote-server.sh可执行文件

chmod 700 ~/git/server-provisioning/setup-remote-server.sh

执行设置脚本:

./git/server-provisioning/setup-remote-server.sh server1

相关内容