自宅検証を行う上でWindowsPCをあれこれカスタマイズしようとしたお話です
OpenSSH for Windowsのインストール手順はこちらです
【現象】
windowsクライアントをSSHサーバにするべく
OpenSSH for Windowsをインストールする
(cygwinが別の用途で既に入っている。)
ただ、鍵認証を行ったときのみsshでアクセスできない
【環境】
Windows Vista HOME Premium
OPENSSH for Windows 7.1p1
【切り分け】
1.OpenSSHインストール完了
2.ssh.conf を修正し、sshdを再起動する
3.ローカル・別PCからTeratermを使い、パスワード認証ありのsshアクセスする
→ログインできた
4.鍵認証をするべく、その設定を行う
クライアント側(TeraTerm)で作成
-鍵の種類:RSA
-ビット数:2048
鍵のパスフレーズ:パスワードあり、なし 両方作成
5.公開鍵の内容を「authorized_keys」ファイルにコピーする
6.ローカル、別PCからTeratermにて鍵認証でsshアクセスする
→ログインできない
Teraterm エラーメッセージ
“認証に失敗しました。再試行してください”
7.ファイルのパーミッション、所有者を変更する
パターン1
> chmod 755 $HOME/.ssh
> chmod 644 $HOME/.ssh /authorized_keys
→事象変わらず、ログインできない
パターン2
> chmod 700 $HOME/.ssh
> chmod 600 $HOME/.ssh/authorized_keys
→事象変わらず、ログインできない
8.公開鍵の内容を「authorized_keys」ファイルにリダイレクトする
(”5”は手動でコピーしたので、今回はリダイレクトにする)
> cat id_rsa_pub > authorized_keys
→事象変わらず、ログインできない
9.sshアクセスを行った時の詳細ログを確認する
cygwin上より、ssh -vvv -i 秘密鍵ファイル名 アカウント名@localhost
※オプション”v”の数だけ詳細なログを吐き出す
> ssh -vvv ~省略~
(一部抜粋)
moduli does not exist, using fixed modulus
> /var/log/messages
→出力されない
10.cygwinの中にある “moduli”ファイル を”C:\Program Files\OpenSSH-Win32″にコピー
→エラーメッセージが変わったが、結局ログインできない
> tail -f sshd.log
11.OpenSSHを再インストール
setup-ssh-lsa.cmd でエラーを起こしていた
(管理者権限のPowerShell、コマンドプロンプトで実行しても同様にエラーを起こす)
C:\Windows\system32copy C:\Program Files\OpenSSH-Win32\x86\ssh-lsa.dll
C:\Windows\system32\
指定されたファイルが見つかりません。
12.バッチでのコピーがうまくいかないようなので、手動で “ssh-lsa.dll” を
“C:\Windows\system32\にコピー
→事象変わらず、ログインできない
13.再度、Teratermでのアクセスを試みる
→やはり、ログインできないが、あることに気づく
→ログイン時に”秘密鍵ファイルを選択する”ときに以下の設定になっているが
いままで作成した秘密鍵がデフォルトで出てこない
Teraterm 秘密鍵ファイルの選択 ダイアログ
-ファイル名:identity
-フィルタ:秘密鍵ファイル
表示されるファイル
id_rsa
表示されないファイル
id_rsa2
id_rsa3
id_rsa4
id_rsa5
※フィルタを”すべてのファイル(*.*)”にすれば出てくるが・・・
14.ファイル名を変更してsshアクセス
修正前
id_rsa2
id_rsa3
id_rsa4
id_rsa5
修正後
id2_rsa
id3_rsa
id4_rsa
id5_rsa
→無事、ログインできた
【結論】
ハマると大変・・・
以下は、sshでうまくアクセスできない時に重点的に確認する部分
・host key、moduli、設定ファイル などのファイルの配置場所
・.ssh、authorized_keys のパーミッションと所有者
・ssh.confの内容
・authorized_keys へはリダイレクトで公開鍵を追加する
・秘密鍵(id_rsa)のファイル名
また、サーバの筐体やNICを変更したり、ssh.confを変更した後に
sshアクセスしたとき(クライアント→サーバ)以下のメッセージがでて
ログインできない
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
この場合は、クライアント側にknown_hostsができるので
(cygwinだったり、Teratermだったり、そのアプリでアクセスしたら、その配下に生成される)
そのファイルを削除すれば、再度アクセスできる