はじめに
Windowsのサーバに、Windowsのクライアントから、鍵認証sshで接続しています。
ところが最近、チームのメンバーから
奴:なぜかとつぜん、接続できなくなっちゃった。なんにもしてないのにぃ…、接続できないとお仕事できないよぅ…ピエン
俺:なんもしてないのに壊れるわけないやんけ…
エラーの追求
とりあえずpowershellで接続してエラーメッセージを確認します。-v
オプションを重ね掛けしてデバッグメッセージも確認します。
ssh <hostname> -l <username> -p <port> -i <privatekeypath> -v -v -v
passphraseを入力した後、以下のようなメッセージが出て拒絶されます
debug3: send packet: type 50
debug2: we sent as publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
<USER>@<HOST>:Permission denied (publickey)
通常はtype 52
のパケットを受け取って、認証がうまく行くはずですが、type 51
を受け取っています。
ともかくpublickeyのアクセス権限周りが怪しそうなので色々考えます。
ちなみにlinuxやmacだとchmod
で権限変えられますが、icacls
で変更できます。
が、私は「エクスプローラが使えるのであればそっちの方がラクじゃん…」とおもってしまうぐらいITリテラシーの低い人なので察してください。
原因
よくよく確認したら、サーバ側の~/.ssh/
のアクセス権限がいつの間にか変更されていました。
具体的には、『当該ユーザ以外のユーザも、~/.ssh/
にアクセスできる状態』になってしまっていました。
きっと我思うに…
- 誰かがそのユーザの何かしらのドキュメントをエクスプローラで引っこ抜こうとした
- よう知らんけど管理者権限ユーザとか何かでログインして、
C:\Users\<USERNAME>
にアクセスしようとして、 - 知らんうちにディレクトリのアクセス権限を書き変えてしまって、
- それが子ディレクトリにも権限が継承されてしまって、
- 結果、
~/.ssh/
の権限も書き変わってしまったがために、 -
Permission denied (publickey)
の原因になった
のではないかと推測します。
復旧と対策
-
~/.ssh/
をエクスプローラのプロパティで開き - 「セキュリティタブ」から「詳細設定」を開いて
- 権限の継承を無効化し
- 不要なユーザの権限を削除する
おわりに
なんもしてなくないやんけ!いいかげんにしろ!