レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

sshpassをWindows(Cygwin)で使ってみる(パスワード指定自動ログイン)

2013年1月25日 2015年5月14日
cygwin ssh

前回の記事 sshpassを使ってパスワード指定のSSH接続を行ってみる(パスワード指定自動ログイン) では、 sshpass( Non-interactive ssh password authentication ) をLinux OSにインストールして使ってみました。

sshpassを本当に使いたい環境は、Windowsが一番なのかなぁと思います。WindowsでこれらのUnix系のアプリケーションを動作させるには、やっぱりCygwinの環境が一番です。

今回は、WindowsのCygwin環境を使って、sshpassをインストールし、使ってみたいと思います。

Cygwinとは、
Cygnus Solutions社(現在ではRed Hat社の一部門)が開発したWindows用の開発ツールのセットで、GNU Cygnus Windows から名づけられています。

なんといっても、Microsoft のWindows上で動作するUNIXライクな環境としては、代表的なフリーソフトです。 ライセンスが、GNU GPL version 2で提供されていて Cygwinで作成されたアプリケーションは、GNU GPL2に準拠する必要があります。
ただ、利用する分には、何も問題ありません。それを配布しようとするとGNU GPL2が適用されソースコードの開示が求められます。

sshpassをインストール

まずは、sshpassをインストールします。
Cygwin環境下でのバイナリはありませんので、sshpassをソースコードからコンパイルすることになります。
ただ、環境さえ整えれば、何の問題もなく動作しますので、ちょっとやってみます。

  1. 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

  2. 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

  3. 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)
    # 以下のような感じでエラーで完了しません。
    [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のはず?です。
    makeがとおって、make install で同じようにエラーがでることがありますが、同じように対処すれば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 コマンドをそのまま指定します。

# 例です。
$ sshpass -p '123456' ssh -o StrictHostKeyChecking=no hoge@host.example.com

# SSHでログインした様子です。
Last login: Wed Nov 21 09:48:50 2012 from 192.168.1.33
[hoge@host ~]# pwd
/home/hoge
[hoge@host ~]# whoami
hoge
[hoge@host ~]# exit
logout
Connection to 192.168.1.99 closed.
-o StrictHostKeyChecking=no を指定しないと、初回接続時に、以下のような厳格なホスト鍵チェックの確認メッセージが出力されるので、これを避けるために設定しています。
The authenticity of host '192.168.1.99 (192.168.1.99)' can't be established.
RSA key fingerprint is 11:22:33:44:55:66:77:88:be:d0:ca:61:52:6f:ad:d8.
Are you sure you want to continue connecting (yes/no)?
また、ポート番号をデフォルトと異なるように設定している場合は、 -p オプションで追加しましょう。
ここで、Cygwin版では、ちゃんとSSHログアウトしたのに戻らない現象が発生しました。 Ctrl + Cで戻すことはできますが、自動化したいとき、ちゃんと戻らないのは、ちょっと困りますから、ちゃんともとにもどるようにパッチを作成しました。 また、このパッチは、ついでに秘密鍵のパスフレーズにも対応したものです。
解凍してpatchをあてて、再度、makeすればできると思います。
[sshpass-1.05]$ gunzip main.c.patch.gz
[sshpass-1.05]$ patch < main.c.patch
patching file main.c
[sshpass-1.05]$ make
...
[sshpass-1.05]$ make install
...
これで、以下のように -i オプションを指定し、パスフレーズで暗号化された秘密鍵を指定できるようになるでしょう。
もちろん、このときのsshpass -p 以降のパスワードは、秘密鍵のパスフレーズを指定することになります。
$ sshpass -p  '123456' ssh -p 22 -i /home/hoge/rsa.key -o StrictHostKeyChecking=no hoge@host.example.com

sshpassのオプションには、以下のものがあります。

   -f filename   指定されたファイル名(パスワードのみを出力したもの)に出力されたパスワードを使用する
   -d number     ファイル番号(C言語のopenの戻り値に相当する、通常、使わないかな、プログラミングしたい方向け)
   -p password   コマンドラインにて指定されたパスワードを使用する
   -e            環境変数 "SSHPASS"に指定されたパスワードを使用する

これで、自動ログインのためのスクリプトが簡単に書けます。たとえば、上の例でいえば、

#!/bin/sh
/usr/local/bin/sshpass -p '123456' ssh -o StrictHostKeyChecking=no hoge@host.example.com

という内容のファイルを /home/hoge/login_ssh_auto.sh というファイル名で保存したとします。
もちろん通常のCygwinのターミナル上でいつでもスクリプトは実行できますから、1発でログインできます。
また、Windowsのショートカットファイルを作成して、 リンク先に以下のように設定すれば、Cygwinのターミナル mintty が起動して、bash へログインのあと、sshでhost.example.comへ自動的にログインしてくれます。
ショートカットファイル

C:\cygwin\bin\mintty.exe -e /bin/bash --login /home/hoge/login_ssh_auto.sh

これをダブルクリックで実行すれば、以下のようにログインできるはずです。
sshログイン


何度も言いますが、これだけは、理解しておいて欲しいのですが、いずれもセキュアではありません。
便利さを追求したもので、これを使ってログインする場合は、人に覗かれる心配や、スクリプトにしてしまった場合は、管理を十分に考えないといけないでしょう。

ただ、便利なのは確かです。

また、minttyは、cygwinのデフォルトのターミナルソフトです。TeraTermと比較しても遜色ありませんし、たぶん、使いこなせばそれ以上だと思います。 MinGWでのminttyは、利用できますが、やっぱり文字化けの問題は付きまといます。 MinGWは開発環境だけを考えれば、それなりに良い部分も多いのですが、やっぱりUNIXライクな環境を手に入れたいと思ったら、cygwinには負けます。 特に cygwin 1.5 , 1.7に関しては、かなり使いやすくなりました。
もちろん、問題が全くないわけではありませんが、最近では手放せなくなっています。
少なくとも minttyはおすすめです。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

sshpassを使ってパスワード指定のSSH接続を行ってみる(パスワード指定自動ログイン)

今回は、SSHです。 sshpass( Non-interactive ssh password authentication ) を使う ...

Windows版 lftp で自動ダウンロード、アップロードを行う方法

最近では、レンタルサーバの障害が、この業界でも話題になっています。万が一に備えてのバックアップは大事です。 ウェブ関連データのバックアップを自 ...

SSHのX11Forwarding を使ってセキュアなリモートでGUIを操作する

SSHポートフォワード と VNC を使ってセキュアなリモートデスクトップを使ってみる では、SSHのポートフォワードとVNCを使っ ...

Cygwin のインストール・アップデートで cygutils.sh exit code 127 が出る件

久しぶりにWindowsでUnixライクな作業をやろうとCygwin環境をアップデートしようとセットアップを起動しました。 すると、cygut ...

procmailの代わりに(makeを使って)maildropをインストールする(make編)

procmailの代わりに(rpmを作成して)maildropをインストールする(RPM編) では、CentOS/Scientific Linu ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.1834 [s]