前回の記事 sshpassを使ってパスワード指定のSSH接続を行ってみる(パスワード指定自動ログイン) では、
sshpass( Non-interactive ssh password authentication ) をLinux OSにインストールして使ってみました。
sshpassを本当に使いたい環境は、Windowsが一番なのかなぁと思います。WindowsでこれらのUnix系のアプリケーションを動作させるには、やっぱりCygwinの環境が一番です。
今回は、WindowsのCygwin環境を使って、sshpassをインストールし、使ってみたいと思います。
Cygnus Solutions社(現在ではRed Hat社の一部門)が開発したWindows用の開発ツールのセットで、GNU Cygnus Windows から名づけられています。
なんといっても、Microsoft のWindows上で動作するUNIXライクな環境としては、代表的なフリーソフトです。 ライセンスが、GNU GPL version 2で提供されていて Cygwinで作成されたアプリケーションは、GNU GPL2に準拠する必要があります。
ただ、利用する分には、何も問題ありません。それを配布しようとするとGNU GPL2が適用されソースコードの開示が求められます。
- 目次
- 履歴
2013年1月25日 初版
sshpassをインストール
まずは、sshpassをインストールします。
Cygwin環境下でのバイナリはありませんので、sshpassをソースコードからコンパイルすることになります。
ただ、環境さえ整えれば、何の問題もなく動作しますので、ちょっとやってみます。
- Cygwin環境にgcc4をインストールします。
$ apt-cyg install gcc4 ...
apt-cygは、Debian系のaptコマンド(CentOSではyumに相当)と ほぼ同じようにパッケージのインストール、アンインストールすることができるcygwinツールです。
Bashスクリプトファイルなので、簡単にインストールできます。
$ svn --force export http://apt-cyg.googlecode.com/svn/trunk/ /bin/ $ chmod +x /bin/apt-cyg
インストールを終えたら、デフォルトで gcc → gcc4 を使用するように設定しておきます。
$ set-gcc-default-4.sh
- sshpass を環境一式をダウンロードします。
# sshpass.tar.gz のファイル名でダウンロードします。 $ wget "http://sourceforge.net/projects/sshpass/files/latest/download?source=files" -O sshpass.tar.gz ... # ダウンロードしたsshpass.tar.gz を展開します。 $ tar xfz sshpass.tar.gz # sshpass-x.xx というディレクトリへ展開されているはずです。 $ ls sshpass-1.05
- sshpass をmakeしてインストールします。
ここでは、便宜上 最新版である sshpass-1.05 のディレクトリ配下へすべての環境が展開されたものとして以降解説します。
# sshpassが展開されたディレクトリへ移動します。 $ cd sshpass-1.05 # sshpassの環境設定を行います。 # sshpassをmakeする環境が整備されているかチェックされます。 [sshpass-1.05]$ ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes ... checking for strdup... yes configure: creating ./config.status config.status: creating Makefile ... config.status: executing depfiles commands # configure でMakefileが作成されますから、あとは、makeするだけです。 [sshpass-1.05]$ make make all-am make[1]: Entering directory '/home/hoge/sshpass-1.05' gcc -DHAVE_CONFIG_H -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c mv -f .deps/main.Tpo .deps/main.Po gcc -g -O2 -o sshpass.exe main.o make[1]: Leaving directory '/home/hoge/sshpass-1.05' # 最後にインストールします。 [sshpass-1.05]$ make install make[1]: Entering directory '/home/hoge/sshpass-1.05' test -z "/usr/local/bin" || /usr/bin/mkdir -p "/usr/local/bin" /usr/bin/install -c sshpass.exe '/usr/local/bin' test -z "/usr/local/share/man/man1" || /usr/bin/mkdir -p "/usr/local/share/man/man1" /usr/bin/install -c -m 644 sshpass.1 '/usr/local/share/man/man1' make[1]: Leaving directory '/home/hoge/sshpass-1.05' # ちゃんとインストールできたか確認します。 [sshpass-1.05]$ which sshpass /usr/local/bin/sshpass [sshpass-1.05]$ sshpass Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descriptor for getting password -p password Provide password as argument (security unwise) -e Password is passed as env-var "SSHPASS" With no parameters - password will be taken from stdin -h Show help (this screen) -V Print version information At most one of -f, -d, -p or -e should be used
Cygwin 1.7 + Windows 8では、makeでやたらとエラーが出力されることがあります。
(1.7.17-1 の時点では、Windows8 上で 少なくとも fork() を使うツール( 例 Make )が異常終了してしまう。 出典:Wikipedia)
makeがとおって、make install で同じようにエラーがでることがありますが、同じように対処すればOKです。# 以下のような感じでエラーで完了しません。 [sshpass-1.05]$ make make all-am make[1]: ディレクトリ '/home/hoge/sshpass-1.05' に入ります gcc -DHAVE_CONFIG_H -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c 1 [main] make 2772 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFFA0000 != 0x0 mem alloc base 0xFFEB0000, state 0x2000, size 65536, Win32 error 487 12474 [main] make 2772 C:\cygwin\bin\make.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed 13046 [main] make 2772 open_stackdumpfile: Dumping stack trace to make.exe.stackdump 3 [main] make 5648 fork: child -1 - forked process 2772 died unexpectedly, retry 0, exit code 256, errno 11 make[1]: vfork: Resource temporarily unavailable make[1]: ディレクトリ '/home/hoge/sshpass-1.05' から出ます Makefile:193: recipe for target 'all' failed make: *** [all] Error 2 # この対処は、UTF-8によるものらしいので、とりあえず、LANGを"C"に切り替えてmakeします。 [sshpass-1.05]$ echo $LANG ja_JP.UTF-8 [sshpass-1.05]$ export LANG=C [sshpass-1.05]$ make make all-am make[1]: Entering directory '/home/hoge/sshpass-1.05' gcc -DHAVE_CONFIG_H -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c mv -f .deps/main.Tpo .deps/main.Po gcc -g -O2 -o sshpass.exe main.o make[1]: Leaving directory '/home/hoge/sshpass-1.05' # これでOKのはず?です。
# 以下のような感じでエラーで完了しません。 [sshpass-1.05]$ make install make[1]: ディレクトリ '/home/hoge/sshpass-1.05' に入ります 2 [main] make 4292 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFFA0000 != 0x0 mem alloc base 0xFFEB0000, state 0x2000, size 65536, Win32 error 487 289 [main] make 4292 C:\cygwin\bin\make.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed 841 [main] make 4292 open_stackdumpfile: Dumping stack trace to make.exe.stackdump 3 [main] make 8056 fork: child -1 - forked process 4292 died unexpectedly, retry 0, exit code 256, errno 11 make[1]: vfork: Resource temporarily unavailable test -z "/usr/local/share/man/man1" || /usr/bin/mkdir -p "/usr/local/share/man/man1" 15004 [main] make 1224 fhandler_disk_file::fixup_mmap_after_fork: requested 0xFFFA0000 != 0x0 mem alloc base 0xFFEB0000, state 0x2000, size 65536, Win32 error 487 15714 [main] make 1224 C:\cygwin\bin\make.exe: *** fatal error in forked process - recreate_mmaps_after_fork_failed 17064 [main] make 1224 open_stackdumpfile: Dumping stack trace to make.exe.stackdump 2178332 [main] make 8056 fork: child -1 - forked process 1224 died unexpectedly, retry 0, exit code 256, errno 11 make[1]: vfork: Resource temporarily unavailable make[1]: ディレクトリ '/home/hoge/sshpass-1.05' から出ます Makefile:574: recipe for target 'install-am' failed make: *** [install-am] Error 2
sshpassを使ってみる
使い方は、当たり前ですが、sshpassを使ってパスワード指定のSSH接続を行ってみる(パスワード指定自動ログイン) と同じです。
sshpass + パスワード を指定し、以降は、ssh コマンドをそのまま指定します。
|
|
解凍してpatchをあてて、再度、makeすればできると思います。
|
もちろん、このときのsshpass -p 以降のパスワードは、秘密鍵のパスフレーズを指定することになります。
|
sshpassのオプションには、以下のものがあります。
|
これで、自動ログインのためのスクリプトが簡単に書けます。たとえば、上の例でいえば、
|
という内容のファイルを /home/hoge/login_ssh_auto.sh というファイル名で保存したとします。
もちろん通常のCygwinのターミナル上でいつでもスクリプトは実行できますから、1発でログインできます。
また、Windowsのショートカットファイルを作成して、
リンク先に以下のように設定すれば、Cygwinのターミナル mintty が起動して、bash へログインのあと、sshでhost.example.comへ自動的にログインしてくれます。
|
これをダブルクリックで実行すれば、以下のようにログインできるはずです。
便利さを追求したもので、これを使ってログインする場合は、人に覗かれる心配や、スクリプトにしてしまった場合は、管理を十分に考えないといけないでしょう。
ただ、便利なのは確かです。
また、minttyは、cygwinのデフォルトのターミナルソフトです。TeraTermと比較しても遜色ありませんし、たぶん、使いこなせばそれ以上だと思います。 MinGWでのminttyは、利用できますが、やっぱり文字化けの問題は付きまといます。 MinGWは開発環境だけを考えれば、それなりに良い部分も多いのですが、やっぱりUNIXライクな環境を手に入れたいと思ったら、cygwinには負けます。 特に cygwin 1.5 , 1.7に関しては、かなり使いやすくなりました。
もちろん、問題が全くないわけではありませんが、最近では手放せなくなっています。
少なくとも minttyはおすすめです。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :