forループの変数を使用したリモートコマンドの実行

forループの変数を使用したリモートコマンドの実行

ユーザーを追加する必要がある約100のサーバーのリストがあります。認証されたキーファイルにも追加する必要があるssh-rsaキーがあります。これを行うためにforループを使用しようとしていますが、何の進展もありません。

要塞(接続)にSSHのエイリアスを使用しており、サーバーに接続できますが、プロンプトで停止してからそのプロンプトで終了を入力するまで続行されません。それにもかかわらず、実際にはリモートではなくローカルでコマンドを実行するだけだと思います。

サードパーティ製のツールは利用できないため、基本インストールで提供されているツールを使用する必要があります。

#!/bin/bash

connect='ssh user@bastionserver -t --'
adduser='adduser  -disabled-password  --gecos "a user account" -home /home/foobar foobar -q'
mkdir='mkdir /home/foobar/.ssh'
chmod='chmod -R 700 /home/foobar/.ssh/'
chown='chown -R soc /home/foobar/'

for server in $(cat server_list.txt)
do
    $connect root@"$server"
    echo "$adduser"
    echo "$mkdir"
    echo "$chmod"
    echo "$chown"
done

私はこれを見つけることができません!助けてくれてありがとう。

ベストアンサー1

このsshコマンドは、リモートサーバーでコマンドを実行できます。実行コマンドが与えられない場合、対話型シェルが開始されます。ssh実行したいコマンドを実行するために使用されます。たとえば、

#!/bin/sh

while read server; do
    ssh "user@$server" sh -c '
        adduser  -disabled-password  --gecos "a user account" -home /home/foobar foobar -q
        mkdir /home/foobar/.ssh
        chmod -R 700 /home/foobar/.ssh/
        chown -R soc /home/foobar/'
done <server_list.txt

これは明らかにテストされていないコードです。複数のコマンドを実行できるようにサブシェルを起動し、sh -c実行するコマンドのリストをシェルに提供します。

コマンドはサーバーに接続され(実際には接続されていますが、user@bastionserver入力ファイルにリストされているサーバーとどのように関連しているのかわかりません)、対話型シェルを起動するため「停止」されます。対話型シェルが終了するまで、スクリプトは続行されません。

残りのコードは文字列を端末に出力します。これを実施しません。

コマンドを変数に入れようとしないでください。期待どおりに動作するケースはほとんどありません。たとえば、変数に保存されたコマンドをどのように実行できますか?」。


これが私にとって本当の仕事であれば、次の方法を使ってやろうとしています。アンシプール。残念ながら、私はここで完全な解決策を自信を持って提供するのに十分なAnsibleを知りません。

おすすめ記事