Linux Bashスクリプトリモートサーバー

Linux Bashスクリプトリモートサーバー

Bashスクリプトがあり、次のコマンドを実行したいと思います。

  1. Apacheサービスのダウンロード
    sudo apt-get install apache2 -y > /dev/null 2>&1
    
  2. 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スクリプトファイルが配布されているサーバーではコマンドを使用できないため)。

メッセージを表示せずにログインするためにいくつかの方法を試しました(すべて失敗)。

どうすればいいですか(自動でログインしてこれら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

おすすめ記事