アーカイブ

2016 年 5 月 19 日 のアーカイブ

MAC OSXでssh接続用のシェルスクリプトを作成する expectコマンド

2016 年 5 月 19 日 Comments off

約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 となっています。

 

今後使えそうなコマンドとなりそうです。色々と自動化に使えそうなものがありますね。バックアップとか・・・

*****************************************************************************

ブログランキング・にほんブログ村へ

にほんブログ村

PVアクセスランキング にほんブログ村