Bashスクリプトがあり、次のコマンドを実行したいと思います。
- Apacheサービスのダウンロード
sudo apt-get install apache2 -y > /dev/null 2>&1
- MySQLサービスのダウンロード
sudo apt install mysql-server -y > /dev/null 2>&1
ただし、このBashスクリプトは、これら2つのコマンドを実行するサーバーの外部にあります。
たとえば、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"
どうすればいいですか(自動でログインしてこれら2つのコマンドを実行しますか?)
ベストアンサー1
更新:質問をもう一度読んだ後、途中にサーバーを置く部分を見逃したことは明らかです。インストールスクリプトをマイコンピュータに移動し、ProxyJumpパラメータを使用して適用します。これを反映して回答を更新しました。必要なのは、公開鍵をサーバーに追加するだけです。
私は個人的に1つだけ実行するのが好きなので、必要に応じてすべてをスクリプトに入れてそのスクリプトを実行します。したがって、スクリプトがある可能性があります~/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 サーバー1