2015年9月6日日曜日

[ssh] OpenSSHのアップデートでssh-agentがパスワードを覚えてくれなくなった問題への対処

ssh-agent/ssh-addを利用してsshを用いたサーバーへのログイン時のパスワード入力を省略している方、OpenSSHのアップデートにより、毎回パスワード入力を求められるようになった場合は以下の設定を疑ってみてください。

問題の症状:

OpenSSHパッケージを最新版にアップデートすると発生するようになった問題です。ssh-agentを起動してssh-addで鍵を正しく登録しているにも関わらず、sshコマンドを実行する度に"password:"というプロンプトが表示されてパスワードの入力を求められてしまいます。

環境:

問題に遭遇&解決した私のcygwin環境では以下のバージョンで問題が発生することを確認しました。
  • OpenSSH_7.0p1, OpenSSL 1.0.2d 9 Jul 2015
  • OpenSSH_7.1p1, OpenSSL 1.0.2d 9 Jul 2015

以下のバージョンでは問題は発生していませんでした。
  • OpenSSH_6.9p1, OpenSSL 1.0.2d 9 Jul 2015

原因と解決方法:

OpenSSHがデフォルトでサポートするkey typeに変更があったのが原因です。私の場合は鍵がDSAであったため、"ssh-dss"というkey typeをサポートするように設定することで、以前通り正しくパスワードを覚えてくれるようになりました。
具体的には~/.ssh/config(もしくは/etc/ssh_config)に以下の記述を追加すれば、デフォルトではサポートされていないキータイプがサポートされます。
PubkeyAcceptedKeyTypes +ssh-dss

自分の鍵のタイプは以下のコマンドで確認可能です。
% ssh-add -l
1024 xx:yy:8e:4f:72:2c:a4:b9:ad:ce:e7:80:a3:5d:e6:0f /home/xxxxx/.ssh/id_dsa (DSA)

cygwinのMLに質問を投げたところGeorgeさんという親切な方がアドバイスがとどき、教わった解決方法です。感謝。

関連情報:

1024bitの鍵は安全ではないので、2048bit以上の鍵を使うのが正しい解決方法だよ、という指摘をいただきました。DSAは1024bitまでしか扱えないようですが、RSAなど他のタイプで2048bit以上の鍵を作ることのがよいようです。RSAの2048bitの鍵を作って確認したところ、PubkeyAcceptedKeyTypesの設定を変えなくても期待通り動作しました。

参考:

2015年9月2日水曜日

[cygwin] cygwin版X server(XWin)にリモートクライアントから接続できない問題の対処方法

cygwinを最新バージョンにアップデートしたところ、リモートのX clientからwindows上のcygwin版X serverに接続できなくなってしまいました。
対処方法は簡単でXWin起動時に"-listen tcp"オプションを付けてあげればよいだけです。cygwinバージョンアップ前にはオプション指定なしで接続できていたため、デフォルトの設定が変わったのだと思われます。

cygwin環境:

uname -aで表示されるcygwinバージョン情報です。
% uname -a
CYGWIN_NT-6.1 xxx 2.2.1(0.289/5/3) 2015-08-20 11:42 x86_64 Cygwin

問題発生時の症状:

クライアント側で起動したxtermをサーバー側で表示しようとすると、以下のようなエラーになっていました。
% xterm
xterm Xt error: Can't open display: xxx:0.0

解決方法:

XWin.exeの起動パラメタに"-listen tcp"を追加します。Cygwin-Xのアイコン(ショートカット)のプロパティを開き、「リンク先」を以下のように変更してください。
  • (デフォルト)
    • C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin"
  • (修正後)
    • C:\cygwin64\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/XWin.exe :0 -multiwindow -listen tcp"

関連情報:

これ以外にもいろいろとハマリどころはあるので、上記オプションで解決しない場合は以下のケースも疑ってみてください。
  • サーバー(windows/cygwin)側の問題
    • xhostへのクライアント登録ができていない
    • ファイアウォール設定が有効になっている
    • ssh起動時の引数に-Xを指定していない
  • クライアント側の問題
    • DISPLAY環境変数が不正
    • sshdの設定不正(X11Forwardingがnoとなっている)
    • xauthがインストールされていない

参考: