私は似たような質問を少し探しましたが、次のような項目で1つのコマンドまたはおそらくいくつかのコマンドを実行する以外は。
ssh user@Host -t Sudo su -
ただし、基本的に15台のサーバーで一度にスクリプトを実行する必要がある場合はどうなりますか。これはbashで実行できますか?完璧な世界では、これを実現するために、可能な限りアプリケーションのインストールを避ける必要があります。議論のために、10個のホストで次のことを行う必要があるとしましょう。
私はそれをすべて行うスクリプトを持っていますが、それは私がすべてのサーバーにログインし、リポジトリからスクリプトをプルダウンして実行することに依存しています。これがbashで実行できない場合、どのような代替案を提案しますか? Perlなどのより大きなハンマーが必要ですか(Pythonはyum/up2dateのおかげでRHEL環境のすべてのボックスにあることを保証できるのでPythonが好まれるかもしれません)?誰かが私を指すことができれば特にbashで実行できる場合は、役立つ情報があれば大歓迎です。PerlまたはPythonを使用しますが、それらについてもわかりません(作業中です)。ありがとうございます。
多くの場合、Expectの元のTclバージョンを使用します。あなたはそれをローカルマシンに持っている必要があるだけです。 Perlを使用しているプログラム内にいる場合は、これを Net :: SSH :: Expect で行います。他の言語にも同様の「期待」ツールがあります。
CheとYangが示すように、ローカルスクリプトを実行したり、ヒアドキュメントを使用したりできます。
ssh root@server /bin/sh <<\EOF
wget http://server/warfile # Could use NFS here
cp app.war /location
command 1
command 2
/etc/init.d/httpd restart
EOF
先日、Perlメーリングリストで、多数のサーバーでコマンドを一度に実行する方法の問題が発生しました。同じ推奨事項を示します そこで提供しました 、つまりgsh
を使用します。
http://outflux.net/unix/software/gsh
gshは "_for box in box1_name box2_name box3_name
_"ソリューションに似ています すでに与えられています ですが、gshの方が便利だと思います。サーバーを含む/ etc/ghostsファイルをweb、db、RHEL4、x86_64などのグループ(man ghosts)に設定し、gshを呼び出すときにそのグループを使用します。
_[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$
_
たとえば、web + dbまたはweb-RHEL4を使用して、ゴーストグループを結合または分割することもできます。
また、shmuxを使用したことはありませんが、 そのWebサイト には、多数のサーバーで一度にコマンドを実行できるソフトウェア(gshを含む)のリストが含まれています。 Capistrano はすでに言及されており、(私が理解していることから)そのリストにも含まれている可能性があります。
期待を見てください(man expect
)
私は過去にExpectを使用して同様のタスクを実行しました。