- ベストアンサー
シェルスクリプトで他のサーバへSSH接続する方法とサーバ内での処理方法について
- シェルスクリプト内で他のサーバへSSH接続し、サーバ内で別のシェルスクリプトを実行する方法について教えてください。
- 具体的には、作業PCからサーバAへSSH接続し、root権限でスクリプト1を実行し、その中でサーバA内でスクリプト2を実行し、さらにサーバBへSSH接続してroot権限でスクリプト3を実行する手順について詳しく教えてください。
- また、参考になるコマンドやサイトがあれば教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
普通にsshでできるはずですが?サーバーA、サーバーBともにopensshはインストールしてありますよね?もし、インストールしていない場合、「Linux openssh インストール」などで検索してみましょう。 sshのマニュアルで、引数に[command]とあるのを見たことありませんか? http://www.openbsd.org/cgi-bin/man.cgi?query=ssh&sektion=1 これは、例えば次のコマンドを実行すると、user0としてログインした上でlsを実行します。 $ ssh user0@host ls 同様にscript3.shをroot権限で実行するなら、次で良いでしょう。 $ ssh root@host /where/you/put/script3.sh ただ、root権限でのログインをするにはサーバーBにてroot権限でのログインを可能とするよう設定を変更する必要があります。 /etc/sshなどにあるsshd_configを編集し、PermitRootLoginを設定してください。 http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config&sektion=5 サーバーBのルート権限が奪取されてもあまり気にしないならここでPermitRootLogin yesとしても良いかもしれませんが、おっしゃるような用途で使う場合、PermitRootLogin forced-commands-onlyと設定するのが普通です。 この作業をするためには当然、ssh-keygenでログインするときに使う公開鍵を作っておき、サーバーBの~root/.ssh/authorized_keysに置いてあると思います。(何を言っているのかわからないなら、「ssh 公開鍵 使い方」などで検索してみてください。)このauthorized_keysで、ログインに使用する公開鍵の前にcommand="/where/you/put/script3.sh"を書いておくと、その公開鍵を使ったログインではscript3.shしか実行できなくなり、より安全です。 http://chihungchan.blogspot.jp/2008/08/restrict-ssh-to-run-specific-command.html あと、これも参考になるかもしれません。 http://oreilly.com/catalog/sshtdg/chapter/ch08.html 頑張って。
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
>もし、sudoを使用して私がやりたい事の参考になるページをご存知でしたら教えてください。 sudoの使い方調べられましたか? sudoの設定をしておくだけなので、sudoの設定の仕方も含めた使い方の載ってるサイトならどこでも参考になるかと思います。
- wormhole
- ベストアンサー率28% (1626/5665)
ログイン自体はroot以外で行う必要がある場合は、 ・sudo を使って実行するスクリプトをroot権限で実行するようにする ・expect を使ってrootにスイッチする などになるかと思います。
お礼
ご回答ありがとうございます。 自分で調べた限りでは、sudo を使うのかな?と思っていました。 しかし、記載するシェルスクリプトのイメージがわかず足踏みしています。 もし、sudoを使用して私がやりたい事の参考になるページをご存知でしたら教えてください。 expect は知りませんでした。 セキュリティ面のメリット・デメリットを含めて調べてみます。
お礼
ご回答ありがとうございます! ログインはroot以外で行う必要があるんです・・・ 今日もお勉強です。