我有一个 Bash 脚本,我想执行如下命令:
- 下载阿帕奇服务
sudo apt-get install apache2 -y > /dev/null 2>&1
- 下载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 脚本文件的服务器上不可用)。
我在没有提示的情况下尝试了多种登录方式(全部失败):
echo "myHardPassword" | ssh -t -o StrictHostKeyChecking=no [email protected]
ssh -t -o StrictHostKeyChecking=no [email protected] "echo myHardPassword"
我怎样才能做到这一点(自动登录并执行这两个命令)?
答案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