MAC OSXでssh接続用のシェルスクリプトを作成する expectコマンド
約2ヶ月ぶりの更新となります。 年度当初の仕事や急遽の長期出張が重なりブログの更新もままならない状態でした。
今週に入り遅めのGW休みをいただきやっとブログの更新のやる気がでて今に至ります(^^;
久しぶりにさくらVPSサーバへログインしようとしたのですがwindowsのPCでは、
テラタームでの自動ログインの記事でも紹介しているように簡単にできたのですが、なにせmac OSXは、
まだまだ私にとって発展途上OSなので色々と勉強中です。
ということで直接シェルを書いたのですが対話式でパスワード入れるところでどうしても止まります。
#!/bin/bash
set timeout 2
ssh ユーザ名@サーバIP -p ポート番号
これを実行すると下のような状況になります。
taka$ ./ssh_login.sh
ユーザ名@サーバIP’s password:
ちなみにユーザ名とかサーバIPは、伏せているので日本語ですが実際は、違いますよ(^^)
色々と調べてみるとexpectというものをinstallすると対話式のシェルを作成できるようです。
しかしそのままinstallできないのでFink、MacPorts、Homebrewなどをあらかじめインストールしておくとコマンドでexpectもインストールできます。
ということで一番MACぽいMACPortsを私は、インストールしました。
ダウンロードは、こちらです。—> MacPorts
上記のサイトからパッケージをインストールすればいいだけです。
するとコマンドでportというものが使えるのでこれを使ってexpectをインストールします。
sh-3.2# port install expect
Warning: The Xcode Command Line Tools don’t appear to be installed; most ports will likely fail to build.
Warning: Install them by running `xcode-select –install’.
—> Computing dependencies for expect
—> Dependencies to be installed: tcl
—> Fetching archive for tcl
—> Attempting to fetch tcl-8.6.5_0+corefoundation+threads.darwin_14.x86_64.tbz2 from https://packages.macports.org/tcl
—> Attempting to fetch tcl-8.6.5_0+corefoundation+threads.darwin_14.x86_64.tbz2.rmd160 from https://packages.macports.org/tcl
—> Installing tcl @8.6.5_0+corefoundation+threads
—> Activating tcl @8.6.5_0+corefoundation+threads
—> Cleaning tcl
—> Fetching archive for expect
—> Attempting to fetch expect-5.45_4.darwin_14.x86_64.tbz2 from https://packages.macports.org/expect
—> Attempting to fetch expect-5.45_4.darwin_14.x86_64.tbz2.rmd160 from https://packages.macports.org/expect
—> Installing expect @5.45_4
—> Activating expect @5.45_4
—> Cleaning expect
—> Updating database of binaries
—> Scanning binaries for linking errors
—> No broken files found.
sh-3.2#
上記でexpectは、インストールできたのでシェルスクリプトのなかでexpectコマンドが使用できるようになりました。
#!/usr/bin/expect set SERVER_IP 10.0.0.1 set USER_NAME hoge set PORT 9999 set PW hogehoge set timeout 5 spawn ssh $USER_NAME@$SERVER_IP -p $PORT expect “password:” send $PW\n interact
以上でログインすることができました。
他のサイトでsend $PW\n を send “$PW\n”としていましたが
当方の環境では、 「 ” 」もパスワードと認識されてログインできませんでした。
普通に全ての「 ” 」を外したところうまくいきました。
expectのバージョンなのかOSXのバージョンの違いなのかわかりません。
/bin/shで作成しても同様でした。(シェルの中でexpect -cとやる方法)
参考までに
OSX Yosemite10.10.5
expect version 5.45 となっています。
今後使えそうなコマンドとなりそうです。色々と自動化に使えそうなものがありますね。バックアップとか・・・
*****************************************************************************
にほんブログ村