2010年09月05日

パスワードを指定してSSHコマンドを実行する

■前置き


サーバを10台とか100台とか管理している状況を想像してみてください。

その10台に全く同じファイルをコピーしたいとか
全く同じコマンドを実行させたいとか
同じ操作をしたくなる状況は多々あると思います。
普通にsshで1台1台にログインして操作すればいいのですが
数が多くなると面倒なので、なんとかスクリプトを組みたいと思うものです。
流石に100回も同じパスワードを打ちたくないですし。

■既存の手法


公開鍵を各サーバに登録してしまえば
自作スクリプトなり、psshなり、codeployなり、選択肢はあれこれありますが
ここでは鍵を登録していない状況で操作するための方法を考えます。

■expectを使った方法


サーバ側に特に準備をしない方法として
expectを使う手があります。
こんな感じのスクリプトを作ります。
ちなみに操作するPC側にはexpectをインストールする必要があります。

#!/usr/local/bin/bash

expect -c "
set timeout 5
spawn ssh $1
expect rsa:
send \r
expect password:
send $2\r
interact
"


# シングルクオートは単なる文字として見なされるようです

expectは対話的な操作を実行するプログラムです。
spawn hogeでhogeを実行し、
expect "hoge"で、hogeという出力を読み、send "hoge\r" でhogeを入力します。
expect 'password:'みたいにやれば、パスワードの入力を求められた時に、
次のsendでパスワードを入力することができるわけです。

通常は1行目は
#!/usr/local/bin/expect にするらしいですが、
bashを経由して expect -c "中身" のようにすることによって
$1を引数として渡せるらしいです。

このスクリプトをexsshなんて名前にして
# exssh user@server password

のようにそれぞれ指定して実行すれば、勝手にログインしてくれます。
$3で、実行させたいコマンドを指定できるように改造してもいいでしょう。

あるいは
# exssh "user@server reboot" password

のように、$1の一部としてコマンドを指定する手もあります。

nanodayo at 03:57コメント(3)トラックバック(0) 
UNIX 

トラックバックURL

コメント一覧

1. Posted by 陥没乳首画像   2011年12月03日 04:28
おっぱいイッパイ
アダルト動画ポスト
2. Posted by めこすじ   2011年12月03日 05:16
まとめないと
画像まとめ置場
3. Posted by Karen Millen Dresses   2014年03月30日 06:46
I browse the blog post and I really like it. I would choose to とある道化の悪戯記録:パスワードを指定してSSHコマンドを実行する recognize you for submitting such an beautiful story. In Karen Millen Dresses Thanks for giving.

コメントする

名前
 
  絵文字
 
 

<% for ( var i = 0; i < 7; i++ ) { %> <% } %>
<%= wdays[i] %>
<% for ( var i = 0; i < cal.length; i++ ) { %> <% for ( var j = 0; j < cal[i].length; j++) { %> <% } %> <% } %>
0) { %> id="calendar-1017982-day-<%= cal[i][j]%>"<% } %>><%= cal[i][j] %>
  • ライブドアブログ

'); label.html('\ ライブドアブログでは広告のパーソナライズや効果測定のためクッキー(cookie)を使用しています。
\ このバナーを閉じるか閲覧を継続することでクッキーの使用を承認いただいたものとさせていただきます。
\ また、お客様は当社パートナー企業における所定の手続きにより、クッキーの使用を管理することもできます。
\ 詳細はライブドア利用規約をご確認ください。\ '); banner.append(label); var closeButton = $('