【Windows 10/Server 2019】SSH鍵認証の設定方法|OpenSSHでRSA鍵を使った安全なリモート接続
本記事では、Windows環境でRSA鍵を使用したSSH認証を構成し、リモートのサーバーやコンピューターへ安全にアクセスする方法を解説します。Windows上でのRSA鍵(証明書)の生成方法から、Windows 10/Windows Server 2019に搭載されているOpenSSHサーバーを鍵認証方式(パスワード不要でリモートホストに認証できる方式)に対応させる設定手順までを紹介します。
SSH鍵認証はLinuxの世界では広く使われていますが、Windowsに導入されたのは比較的最近です。仕組みとしては、クライアントの公開鍵をSSHサーバー側に登録しておき、クライアントが接続を試みた際に、サーバーが対応する秘密鍵をクライアントが保持しているかどうかを確認します。
目次
- WindowsでSSH(RSA)鍵を生成する
- SSH鍵認証のためのWindows OpenSSHサーバーの設定
- ローカル管理者アカウントでSSH鍵を使ってWindowsにログインする方法
WindowsでSSH(RSA)鍵を生成する
まず、OpenSSHが動作しているリモートのWindowsサーバーに接続するクライアントコンピューター上で、RSA鍵ペア(公開鍵と秘密鍵)を生成する必要があります。秘密鍵はクライアント側に保存し(絶対に他人に渡さないこと)、公開鍵はSSHサーバーのauthorized_keysファイルに追加します。WindowsクライアントでRSA鍵を生成するには、OpenSSHクライアントをインストールしておく必要があります。
Windows 10 1809以降およびWindows Server 2019では、OpenSSHクライアントは個別の機能としてインストールできます。
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
それ以前のWindowsバージョンでは、GitHubから配布されているWin32-OpenSSHポートをインストールしてください(WindowsでSFTPサーバーを構築する記事に設定例があります)。
標準(非特権)のPowerShellセッションを起動し、以下のコマンドでRSA 2048ビットの鍵ペアを生成します。
ssh-keygen
秘密鍵を保護するためのパスフレーズの入力を求められます。パスフレーズを設定した場合は、この鍵をSSH認証に使うたびに入力が必要になります。ここでは例としてパスフレーズを設定せずに進めます(セキュリティ上は設定を推奨します)。
ssh-keygenを実行すると、現在のWindowsユーザーのプロファイル(C:\Users\your_username)に.sshディレクトリが作成され、次の2つのファイルが保存されます。
- id_rsa – 秘密鍵
- id_rsa.pub – 公開鍵
RSA鍵の作成後は、秘密鍵をSSH Agentサービスに登録すると便利です。SSH Agentを使うと、秘密鍵を一元管理し、認証時に自動的に利用できます。SSH Agentは秘密鍵を保存し、現在のユーザーのセキュリティコンテキストで提供します。PowerShellのサービス管理コマンドでssh-agentサービスを起動し、自動起動するように設定しましょう。
set-service ssh-agent StartupType 'Automatic'
Start-Service ssh-agent
秘密鍵をssh-agentのデータベースに追加します。
ssh-add "C:\Users\youruser\.ssh\id_rsa"
または次のように指定しても構いません。
ssh-add.exe $ENV:UserProfile\.ssh\id_rsa
SSH鍵認証のためのWindows OpenSSHサーバーの設定
次に、クライアントで生成した公開鍵をSSHサーバー側へコピーします(この例では、OpenSSHが設定済みのWindows 10 1903のリモートコンピューターを使用します)。
WindowsでOpenSSHサーバーを構成する詳細な手順については、別記事で解説していますので参考にしてください。
id_rsa.pubファイルを、SSHサーバーへの接続に使用するユーザーのプロファイル内の.sshディレクトリにコピーします。たとえば、Windows 10にadminユーザーがいる場合は、C:\Users\admin\.ssh\authorized_keys に鍵を配置します。
公開鍵はSCPを使ってSSHサーバーにコピーできます。
scp C:\Users\youruser\.ssh\id_rsa.pub admin@192.168.1.15:c:\users\admin\.ssh\authorized_keys
これで、パスワードなしでWindowsのSSHサーバーに接続できるようになります。秘密鍵にパスフレーズを設定していない場合は、リモートのWindowsホストへ自動的にログインできます。
標準のSSHクライアントでリモートホストに接続するには、次のコマンドを使用します。
ssh (ユーザー名)@(SSHサーバー名またはIPアドレス)
例:
ssh admin@192.168.1.15
これは、IPアドレス192.168.1.15のリモートSSHサーバーにadminアカウントで接続することを意味します。SSH Agentが、事前に登録された秘密鍵を自動的に使って認証を試みます。
ssh-agentサービスを使わずにSSH鍵を管理したい場合は、認証に使用する秘密鍵ファイルのパスを直接指定できます。
ssh admin@192.168.1.15 -i "C:\Users\youruser\.ssh\id_rsa"
RSA鍵を使ってSSHサーバーに接続できず、パスワードの入力を求められ続ける場合は、接続先のユーザーアカウントがローカルのAdministratorsグループ(グループSID:S-1-5-32-544)に所属している可能性があります。これについては後述します。
ローカル管理者アカウントでSSH鍵を使ってWindowsにログインする方法
OpenSSHは、Windowsのローカル管理者権限を持つユーザーに対して、特別な鍵ベースのアクセス設定を適用します。
まず、ユーザープロファイル内のauthorized_keysファイルの代わりに、C:\ProgramData\ssh\administrators_authorized_keysという鍵ファイルを使用します。このテキストファイルにSSH鍵を追加する必要があります(セキュリティ上の理由から、このファイルの読み取り権限はAdministratorsグループとSYSTEMのみに付与してください)。
ユーザープロファイル内のauthorized_keysファイルをそのまま使い、公開鍵のデータをadministrators_authorized_keysファイルへ移動したくない場合は、OpenSSHの設定ファイル(C:\ProgramData\ssh\sshd_config)の該当行をコメントアウトします。
以下の行をコメントアウトします。
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
sshd_configファイルでRSA鍵によるアクセスを許可します。
PubkeyAuthentication yes
さらに、パスワードによるSSHログインを無効化します。
PasswordAuthentication no
sshd_configの変更を保存したら、sshdサービスの再起動を忘れないでください。
restart-service sshd
もう一つ重要なポイントがあります。以前のバージョンのOpenSSHでは、authorized_keysファイルに対するNT Service\sshdの読み取り権限を付与する必要がありました。これには次のいずれかの方法を使います。
- OpenSSHUtilsモジュールをインストールする:
Install-Module -Force OpenSSHUtils -Scope AllUsers。ファイルの権限を変更するには、次のコマンドを実行します:Repair-AuthorizedKeyPermission -FilePath C:\Users\admin\.ssh\authorized_keys - NTFSSecurityモジュールやicaclsを使って、ファイルのNTFSアクセス権を変更する。
- または、sshd_configファイルでStrictModesを無効にする。このモードはデフォルトで有効になっており、公開鍵と秘密鍵の保護が不十分な場合に鍵認証をブロックします。
#StrictModes yesの行のコメントを外し、StrictModes noに変更します。
以上で、Windows上でRSA公開鍵(証明書)を使ったSSH認証の設定が完了しました。この認証方式を利用すれば、リモートサーバーへの安全なアクセス、SSHトンネル経由のポート自動転送、スクリプトの実行など、さまざまな自動化タスクに活用できます。
-
Windows Server 2019で削除・非推奨となった機能まとめ
一般向けのWindows 10と同様に、Microsoftはサーバー向けエディションにも継続的に新機能を追加しています。しかし、機能の追加だけではなく、既存機能の削除や非推奨化も行われている点に注意が必要です。本記事では、Windows Server 2019において削除または非推奨となった機能を一覧形式で詳しく解説します。 Windows Server 2019で削除・非推奨となった機能 「削除」と「非推奨」は意味が異なります。削除された機能はOSから完全になくなっており使用できませんが、非推奨の機能は当面利用できるものの、将来のバージョンで削除される可能性があるため、早めの移行計画が推奨
-
Windows Server 2019にHyper-Vの役割をインストールする手順を徹底解説
はじめに:Hyper-V 2019の2つのインストール方式仮想化の基礎を理解したら、次のステップはハイパーバイザーとして動作できるマシンを環境に導入することです。Hyper-V 2019を物理マシンに導入する方法は大きく分けて2つあります。Hyper-V Server(Core)としてスタンドアロンでインストールする方法(別記事「Hyper-V Server Core」で解説済み)Windows Server 2019に役割(ロール)としてインストールする方法本記事では後者を取り上げ、Windows Server 2019にHyper-V 2019を役割としてインストールする手順を、画面ごとに