はじめに
Windows11 ProにSSHでアクセスするため、OpenSSHサーバーを入れました。
パスワード認証によるアクセスはできるようになったのですが、パスワード打たなくてすむように鍵認証を設定することにしました。少し悩んだ点があったので記録しておこうと思います。
鍵の生成と格納
ローカルPCで鍵の生成をします。Ed25519が最近のお勧め?
> ssh-keygen -t ed25519
C:\Users\<ユーザID>\.sshフォルダに
秘密鍵 id_ed25519
公開鍵 id_ed25519.pub
が作られるので、公開鍵をSSHサーバー側の
C:\Users\<ユーザID>\.sshフォルダ
にコピーし、authorized_keyというファイルにリネーム。(すでにauthorized_keyファイルがある場合はid_ed25519.pubの中身を追記)
authorized_keyおよびフォルダのパーミッションが影響するような記事もありますが、自分はこのパーミッション修正は必要なかったです。
sshd_configの修正
デフォルトでは鍵認証がオフになっていましたので、設定ファイルを修正します。SSHサーバー側の
C:\ProgramData\ssh\sshd_config
ファイルを修正します。
C:\ProgramData\フォルダは隠しフォルダなのでオプションで表示させるなどしてください。
sshd_configファイルを編集するには、管理者権限でメモ帳で開くとか、一時的にアクセス権を追加する必要があります。
#PubkeyAuthentication yes
の行頭の#を削除し、下記のファイル末尾の2行を行頭に#を挿入してコメントアウトします。
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
古い鍵ファイルの削除
C:\ProgramData\ssh\フォルダにある、
なんたら_key
というファイル3つを削除します。
削除する前に、OpenSSHサーバーを停止しておきましょう。
(Windowsの「サービス」アプリ"OpenSSH SSH Server"を探して停止します:なんか名前が冗長ですね??)
削除したファイルはOpenSSHサーバーを再起動すると新規作成されます。(まだ再起動しないで)
パーミッションの修正
WindowsのOpenSSHは関連するファイルのパーミッションにセンシティブとのことです。
パーミッションを修正するマクロが用意されているので、それを利用すると簡単です。
C:\Program Files\OpenSSH\フォルダをターミナル(PowerShell)で開いて、
> FixHostFilePermissions.ps1
というスクリプトを実行すると、修正が必要な箇所を直すか聞いてきますので、「y」を入れて修正してもらいます。
PowerShellでスクリプト実行ができない場合は、Set-ExecutionPolicyでスクリプト実行を許可してください。
OpenSSH SSH Serverの再起動
「サービス」アプリでOpenSSHサーバーを再起動します。
リモートPCでの対応
ローカルPCとサーバーでユーザIDが同じならば、リモートPCから
> ssh -i 秘密鍵ファイル サーバー名
でログインできるはずなのですが、過去にそのサーバーにsshアクセスしていた場合はエラーで入れないことがあります。その場合は
C:\Users\<ユーザID>\.ssh\known_hosts
ファイルをメモ帳などで開いて、アクセス先のサーバーの名前で始まる行を削除してください。(サーバーの古い公開鍵が残ってエラーになる)