Windows 10のOpenSSHサーバーで公開鍵認証ができない時の対策 | DIY

パソコン関連DIY
Windows 10でSSHサーバーを起動して公開鍵認証する。

Windows 10のSSHサーバーで公開鍵認証が出来ずハマりました

先日、ThinkPad X201のSSDが逝きました。突然の出来事でした。最初は再起動で復活するだろうとか、修復ディスクで回復できるとか考えてましたが、どの操作も効かずにSSDのハードの故障と断定しました。SSDを分解しての修理は私には皆目見当が付かないのでハード的な修理は諦めて、あたらしくSSDを購入してOSの再導入となりました。

その際にハマった事の1つが、X201に対してのRSA公開鍵認証によるSCPによるファイルのコピーです。

かなり時間がかかりましたが、結果として無事に設定できて、公開鍵認証でSCP出来ているので、私の備忘録としてブログ記事にしておきます。同様な問題でお困りの方がいれば、是非試してみて下さい。

Windows 10にSSHサーバーを導入する

SSDを交換する前の以前のX201の環境では、別なPC(Linux機)からクローンジョブによる夜間の実行でファイルの転送をX201に行ってました。問題なくSCPは行えてました。その時にも当初RSA認証によるSCPでトラブったのかどうか記憶になく今回も苦労しました。

Windows OSの再インストールを終了して、以前と同様にSCPでファイルを受信する為には、SSHDをインストールする必要があります。Windows10にはOpenSSHクライアントはすでに導入されてますが、SSHサーバーはWindowsの「アプリと機能」から、「オプション機能」を選択してOpenSSHDサーバーを追加導入する必要があります。導入は簡単に終了します。Reboot後にもSSHDを常時立ち上がるように、コンピューターの管理のservicesのメニューからOpenSSHサーバーのスタートアップの種類を、「自動」に変更しておきます。

OpenSSH サーバーをインストールします。
スタートアップの種類は、自動に変更しておく。

上記作業を行ってマシンを再起動すると、SSHDサーバーが起動したので、Linux機からSCPを実行しました。まだ、公開鍵を設定していな状態なので、当然ですがパスワードを訊かれるので入力、無事にファイルのSCPができました。

公開鍵認証する為に、Linux機のパブリックキーを設定する

やりたいことは、公開鍵認証で、パスワード無でのファイル転送なので、ここからさらにLinxuパブリック・キーをX201に設定する作業を行いました。

実際に行った作業は以下です。

  1. X201の自分のホームフォルダーに .ssh のフォルダーを作成
  2. Linux機のパブリックキーファイル(id_rsa.pub)を、.ssh のフォルダーへSCP(この際はまだパスワードが必要)
  3. SCPした、パブリックキーのファイル id_rsa.pubを authorised_keysに変更。(注:私の場合は、新規の作業なので、authorized_keys は無くRenameでOKですが、authorized_keysがある場合は、authorized_keysにid_rsa.pubの内容をappendするのが通常のやり方。Linuxの場合、ssh-copy-id user@hostname で、一回パスワードを入れてやると、authorized_keysにパブリック・キーが自動で追加されるのですが、Windows10のOpenSSHDでは、ssh-copy-id は使えないようです。)

以上です。本来であればこれでLinux機からSSHやSCPしてもパスワードを入力する事なく、接続できるはずです。ところが、公開鍵認証行われず、パスワード入力が必要な状態から抜けだせませんでした。

原因と解決に至るまでの作業

通常、上記の方法で問題なくRSA公開鍵認証でログインやSCPが出来るはずなのですが、Windows10 では、なぜか出来ません。ただ引っ掛かる点としては、使い慣れているLinuxの世界では、RSA認証にはauthorized_keysのファイルのパーミッションを600に設定する事が一般的です。つまり、ファイル所有者しか読み書きできないパーミッション)

Windows OSではファイルのアクセスパーミッションってどうやるのでしょう?

Linuxのファイルパーティション設定とは違うので混乱しますが、icacls コマンドを使用したりして以下のようになるよう変更を加えたのですが、単にauthorized_keysを読み取り専用としました。

icaclsではこのような状態です。User名は伏せさせて頂きました ^^;
Power ShellでModeを確認すると、こんな感じでした。authorized_keys だけはRead Onlyに。

こちらに詳しいファイル属性の情報がありましたので、参考にLinkを貼っておきます。とても分かりやすいです。勉強になりました。

Windowsのエクスプローラーで表示される属性情報文字の意味は?
エクスプローラーの詳細表示で「属性」を選択すると、ファイルやフォルダーの属性情報が「HSDLI」や「RHA」などのように表示される。その意味は?

つまり、Linuxのauthorized_keys のパーミッションと同様に、Windowsでもauthorized_keys は、Adminやシステム以外では自分だけがフルアクセスを持ち、WindowsファイルのモードとしてはRead Onlyとしておけば良いように思います。これでokと思ったのですが…

ただ、これでもRSA認証が通らなかったのです。

最終的に公開鍵認証に成功した変更作業は?

結局、最終的に効果があった変更は、以下の作業だったと思います。OpenSSHサーバーをインストールすると、以下のファイルが作成されます。そして、とくにsshd_config と言うファイルの最後の2行(緑で表示)をコメントアウトして、sshdを再起動したらRSA認証が通りました。多分これが効いたのだと思います。

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

別のWindows機でも試してみたのですが、実は authorized_keysはRead Only でなくてもRSA認証が可能でした。

結論

Windows 10のSSHサーバーに公開鍵認証で接続できない時は、C:\ProgramData\ssh\sshd_config の設定をチェック。最後の2行がコメントアウトされてなければ、コメントアウトして、管理者権限のコマンド・プロンプトで notepadを起動してコメントアウトする(管理者権限が必要です)。その後、以下のコマンドでSSHDを再起動。

net stop sshd
net start sshd

私の場合は、これで見事にパスワード入力なしで、公開鍵認証によるSSH・SCPが出来るようになりました。

C:\ProgramData\ssh フォルダーは隠しフォルダーなので、直接パスを入力しないと見えないのでご注意下さい。

最後まで読んでいただき、ありがとうございました。

投稿者プロフィール

diy-hs
diy-hs
”なんでも自分でやってみる” をテーマに、ブログを書いてます。素人には無理と思う様な事も、実際にやってみるとあっさりと出来たりする事もあります。失敗もありますが、失敗する事で経験となり、次は少し上達したりします。それが楽しいです。そんなDIYの情報を発信して行けたらと思ってます。仕事はAIやクラウド関連を担当してます。そんな訳でプログラミングやシステム構築も趣味と実益を兼ねてDIYを楽しんでます。ギターはもともとクラシックギターを学び、インストルメンタル専門でしたが、高校生の頃にテレビでみた卒業の映画でPaul Simonの曲に憧れて、それ以降いろんなジャンルの弾き語りも楽しんでます。S&Gの曲なら楽譜なしで弾けます。^^; また最近は独学でピアノも始めました。すでに4曲ほどレパートリーがあります。Twitterの方でも発信していますので、ぜひフォロー下さい。
(Amazonのアソシエイトとして、当サイト(diy-hs.com)は適格販売により収入を得ています。)

コメント

タイトルとURLをコピーしました