124

2 つの質問があります。

  1. 複数のリモート Linux マシンがあり、各マシンで同じコマンド セットを実行するシェル スクリプトを作成する必要があります。(いくつかの sudo 操作を含む)。シェルスクリプトを使用してこれを行うにはどうすればよいですか?
  2. リモート マシンに ssh 接続するときに、RSA 指紋認証を求めるプロンプトが表示されたときの処理方法。

リモート マシンは、実行時に作成された VM であり、IP だけを持っています。そのため、それらのマシンにスクリプト ファイルを事前に配置して、自分のマシンから実行することはできません。

4

10 に答える 10

162

複数のリモート 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 指紋認証を求めるプロンプトが表示されたときの処理方法。

StrictHostKeyChecking=no次のオプションを sshに追加できます。

ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"

これにより、ホスト キー チェックが無効になり、既知のホストのリストにホスト キーが自動的に追加されます。ホストを既知のホスト ファイルに追加したくない場合は、オプションを追加します-o UserKnownHostsFile=/dev/null

これにより、中間者攻撃に対する保護など、特定のセキュリティ チェックが無効になることに注意してください。したがって、セキュリティが重視される環境では適用しないでください。

于 2012-12-18T07:28:07.737 に答える
5

これを処理する方法はいくつかあります。

私のお気に入りの方法は、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
于 2012-12-18T08:10:42.570 に答える
1

Perl コードを記述できる場合は、Net::OpenSSH::Parallelの使用を検討する必要があります。

すべてのホストで実行する必要があるアクションを宣言的な方法で記述することができ、モジュールが恐ろしい詳細をすべて処理します。コマンドsudoの実行もサポートされています。

于 2012-12-18T10:02:42.270 に答える
-1

このアプローチに従うことができます:

  • Expect Scriptを使用してリモート マシンに接続します。あなたのマシンが期待をサポートしていない場合は、同じものをダウンロードできます。Expect スクリプトの記述は非常に簡単です (これについては Google でヘルプを参照してください)。
  • リモートサーバーで実行する必要があるすべてのアクションをシェルスクリプトに入れます。
  • ログインに成功したら、expect スクリプトからリモート シェル スクリプトを呼び出します。
于 2012-12-18T07:21:51.863 に答える