パスワード入力自動化! expectを使ってシェルスクリプトでサーバに自動ログイン

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

色々なセキュリティポリシーのサーバにログインが必要なとき、公開鍵認証等で自動でログインできなかったり、
ログインした後にユーザを変更する必要があったりします。
そんなとき、毎回パスワードを入力するのは面倒!(しかも覚えられないし……)という問題を解決するのがexpectというコマンドです。

以下の様なスクリプトを作ってみましょう。

※なお、環境によってはexpectが入っていない場合があるので、yumやapt-get、homebrewなどでexpectをインストールしてあげましょう。

#!/bin/bash
 
SERVER_USER='myname'
 
SERVER_HOST='10.0.0.10'
USER_PASS='userpass'
ROOT_PASS='rootpass'
 
echo 'Connecting...'
expect -c "
set timeout 60
spawn ssh $SERVER_USER@$SERVER_HOST
expect \"$SERVER_USER@$SERVER_HOST's password\"; send \"$USER_PASS\n\"
 
send \"su -\n\"
expect \"パスワード\";
send \"$ROOT_PASS\n\"
 
interact
"

上記のスクリプトは、OSXの端末から日本語版CentOSのサーバにログインするときに用いているスクリプトです。
異なる端末や異なるOS/言語では、一部の記述を変えてやる必要があります。

キモになっているのは、

expect \"$SERVER_USER@$SERVER_HOST's password\"; send \"$USER_PASS\n\"

の部分。
実際には、

[email protected]'s password:

と標準出力されている部分を読み取り、マッチしていればその後sendコマンドでパスワードを送信しています。
同じ要領で、ログイン後にsu -してRootユーザに成り代わっています。

最後にinteractコマンドを送信することで、セッションを自分に戻してその後は通常通りSSHでの操作が可能です。

このシェルスクリプトを保存して随時起動できるようにしておくことで、毎度パスワードを入力する手間が省けます。

注意

そもそもサーバでパスワード認証は基本的にインセキュアな認証方法です。
また、この方法ではシェルスクリプトにサーバのパスワードを記載しているので、ファイルの扱いには十分ご注意ください。

記事の品質向上のため、感想をお聞かせください。

  • 分かりやすかった・ためになった (3)
  • 分かりにくかった・ためにならなかった (2)
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)