cygwin で sshd を立ち上げる方法

cygwinを利用し、windows上でsshのサーバを立ち上げる方法です。これによりputtyのようなsshクライアントで、windowsをリモートからCUIで操作できるようになります。

sshdのインストール

Windows側で cygwinインストーラである setup.exe を実行し、openssh のパッケージをインストールします。

cygwin側の設定

先ずadministrator権限でbashを起動します。cygwinにはrootというアカウントが無く、suもsudoも用意されていません。/etcの下のファイルをいじる場合などは、WindowsのスタートメニューからCygwin Bash Shellを選び、右クリックして"管理者として実行"を選ぶなどして、管理者権限でbashを起動します。

bashが起動したら、コマンドプロンプトでchmodコマンドを実行して、ファイル・ディレクトリのパーミッションを変更します。

$ chmod +r /etc/passwd
$ chmod +r /etc/group
$ chmod a+rx /var

次にsshdの設定を行います。といっても、専用のスクリプトが用意されているので、それを利用するだけです。

$ /usr/bin/ssh-host-config -y

このスクリプト

 *** Info: Host configuration finished. Have fun!

と出力すれば設定は成功です。

このスクリプトにより

が生成されます。また Privilege separation*1 用に sshd というアカウントが作成されます。

以上で設定はおしまい。

起動など

sshdのサービスを手動で起動するには

$ cygrunsrv -S sshd

とします。

手動で停止するには

$ cygrunsrv -E sshd

とします。

動作確認

cygwinbashから

$ ssh localhost 

でログインできることを確認します。

アクセス制限の解除

次に windowsfirewall に穴を開け、外部からsshでログインできるようにします。

windows側で cmd.exe を起動して

 > netsh firewall show portopening
 > netsh firewall add portopening TCP 22 sshd
 > netsh firewall show portopening

とします。

以上で、外部からsshで接続できるようになります。
また、接続元のIPアドレスを制限することも出来ます。方法は、こちら。

トラブルシューティング

調査方法1)うまくいかない場合は

$ ssh localhost -vvvv

と "-v" オプションをたくさんつけて実行すると何かわかるかもしれません。

調査方法2)windowsfirewallのログを確認すると何かわかるかもしれません。

調査方法3)windows側のセキュリティソフトがinstallされているのであれば、sshdが使用する22番ポート(TCP)のアクセス制限が解除できているか確認します。

アンインストール方法

sshdのサービスを削除したい場合は、 windows側で cmd.exe を実行して

 > sc.exe delete sshd

を実行します。

*1:ログイン時の認証処理を安全に行うための仕組み