Windowsでsshdを稼動させ、ゲートウェイごしにSSHを介して接続する

sshdがうまく動かず困っていましたが、単に最新バージョンにすることで解決しました。openssh3.91p-3 -> 4.1p1 on Windows XP Pro SP2です。
なんだったのか原因は不明・・。

簡単な手順

cygwinをインストール

すでにインストールされている場合は、最新版を入れる。SSHだけ最新版、とかにするとほかのパッケージとの整合性で躓くかもしれないので、すべてそのときのものでそろえるのが無難か。

ssh:クライアントを設定

すでに稼動している他のマシンのsshdにログインできるようにする。鍵セットはバージョン2のDSAが無難そう。

sshd:サーバを設定

cygwinssh-host-configを実行。すべてYes。環境変数CYGWINには"ntsec tty"とでも入れておく。

sshdサービスの開始

cygrunsrv -S sshd でスタートする。Windowsのコントロールパネル・管理ツールのサービスでも開始や停止の操作ができる。どうしてもとまらない場合はタスクマネージャでつぶす。killでもとまらないことがある。

動くようになるまで

まずはログイン

ssh localhost でログインできれば、いうことありません。おしまい。
うまくいかなかったらどうするか。

デバッグ出力

クライアント側は ssh -vで詳細な出力がでます。-vvvとならべると、さらに詳しく。また、サーバ側sshdは-dddでもっとも詳細な出力ですが、サービスを停止してコマンドラインから起動したほうがいいかもしれない。この場合、起動ユーザがSYSTEMから一般ユーザに変わるので注意。

パーミッション

ほとんどは、パーミッションの設定がまずい。読めればよいわけではなく、あまりにオープンな設定だとよまずに起動せずこけます。sshdの各key、sshのユーザ側各keyに加えて、ログ出力先、特権分離している場合は(上の手順ではされている)/var/emptyあたりもチェック。しかしこのへんは、デバッグ出力を追っていけばエラーででていてすぐわかるでしょう。

そして最終手段は

エラーはでるのに原因の手がかりが書いてない。こうなったら、すなおにうまくいきそうなバージョンに差し替えたほうが早い。と思いました。

Windows XP Professional SP2をお使いの方。
OpenSSH_4.1p1, OpenSSL 0.9.7g
で動きましたよ。苦労しない人はすんなり動いたんだろうなあ。

本題

で、ほんとうは、これによってsshしかうけつけないゲートウェイ経由でPCAnywhereを動かしたかったのです。他のソフトでも、ポートがあけられれば同じことでしょう。
ここまできたら、クライアントから
ssh -L 5631:localhost:5631 -L 5632:localhost:5632 gateway
gateway
ssh -L 5631:localhost:5631 -L 5632:localhost:5632 server
でいけます。UDPを使わないようにレジストリをいじるとかはしなくても、とりあえず動いているようです。