2つ質問があります。
リモートマシンは実行時に作成されたVMであり、私はそれらのIPを持っています。そのため、それらのマシンにスクリプトファイルを事前に配置し、それらを自分のマシンから実行することはできません。
リモートのLinuxマシンは複数あり、それぞれのマシンで同じコマンドセットを実行するシェルスクリプトを書く必要があります。 (一部のSudoオペレーションを含む)シェルスクリプトを使用してこれをどのように行うことができますか?
あなたはsshでこれを行うことができます、例えば:
#!/bin/bash
USERNAME=someUser
HOSTS="Host1 Host2 Host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
リモートマシンにSSH接続するときに、RSAフィンガープリント認証を要求されたときの処理方法。
SshにStrictHostKeyChecking=no
オプションを追加することができます。
ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
これは Host key checkを無効にする そして自動的に既知のホストのリストにHostキーを追加します。 Hostを既知のhostsファイルに追加したくない場合は、オプション-o UserKnownHostsFile=/dev/null
を追加します。
これは特定のセキュリティチェックを無効にします。例えば、中間者攻撃に対する保護です。したがって、セキュリティが重要な環境には適用しないでください。
これを処理する方法はいくつかあります。
私のお気に入りの方法は http://pamsshagentauth.sourceforge.net/ をリモートシステムとあなた自身の公開鍵にインストールすることです。 (VMにこれらをインストールする方法を考え出してください。どういうわけか、あなたはUnixシステム全体をインストールしました。さらにいくつかのファイルがありますか?)
あなたのsshエージェントを転送して、あなたは今パスワードなしですべてのシステムにログインすることができます。
さらに良いことに、そのpamモジュールはあなたのsshキーペアでSudoを認証するので、必要に応じてroot(または他のユーザーの)権限で実行することができます。
ホストキーのやり取りについて心配する必要はありません。入力が端末ではない場合、sshはエージェントを転送しパスワードで認証する機能を制限するだけです。
Capistranoのようにパッケージも調べてください。間違いなくそのサイトを見回す。リモートスクリプティングについて紹介しています。
個々のスクリプト行は次のようになります。
ssh remote-system-name command arguments ... # so, for exmaple,
ssh target.mycorp.net Sudo puppet apply
apt-get install sshpass
を使用してsshpassをインストールしてから、スクリプトを編集して、LinuxマシンのIP、ユーザー名、およびパスワードをそれぞれの順番に並べます。その後、そのスクリプトを実行してください。それでおしまい !このスクリプトはすべてのシステムにVLCをインストールします。
#!/bin/bash
SCRIPT="cd Desktop; pwd; echo -e 'PASSWORD' | Sudo -S apt-get install vlc"
HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
USERNAMES=("username1" "username2" "username3")
PASSWORDS=("password1" "password2" "password3")
for i in ${!HOSTS[*]} ; do
echo ${HOSTS[i]}
SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
done
あなたがPerlコードを書くことができるならば、あなたは Net :: OpenSSH :: Parallel を使うことを考えるべきです。
あなたは宣言的な方法ですべてのホストで実行されなければならないアクションを記述することができるでしょう、そしてモジュールはすべての怖い詳細の面倒を見るでしょう。 Sudo
を介したコマンドの実行もサポートされています。
この種のタスクでは、Ansibleを繰り返し使用します。これにより、bashスクリプトを複数のコンテナーまたはVMでコヒーレントに複製できます。 Ansible(より正確にはRed Hat)は追加されたWebインターフェースAWXを開くようになりました商用タワーのソース版。
Ansible: https://www.ansible.com/
AWX: https://github.com/ansible/awx
Ansible Tower:商用製品の場合、Towerの15日間のフリートレイルではなく、おそらく無料のオープンソースAWXを探求するでしょう。
これは私のために働きます。
構文:ssh -i pemfile.pem user_name @ ip_address 'command_1; command 2; command 3'
#! /bin/bash
echo "########### connecting to server and run commands in sequence ###########"
ssh -i ~/.ssh/ec2_instance.pem ubuntu@ip_address 'touch a.txt; touch b.txt; Sudo systemctl status Tomcat.service'