この記事では、RSAまたはEdDSAキーを使用してWindowsでSSH認証を構成する方法を示します。 Windowsで公開鍵と秘密鍵のペアを生成し、Windows10/11またはWindowsServer 2019/2022で鍵ベースの認証(パスワードなし)用にOpenSSHサーバーを構成する方法を見てみましょう。
SSHキーベースの認証は、Linuxの世界で広く使用されていますが、Windowsではごく最近登場しました。 クライアントの公開鍵がSSHサーバーに追加され、クライアントがそれに接続しようとすると、サーバーはクライアントが対応する秘密鍵を持っているかどうかを確認するという考え方です。 このようにして、リモートユーザーはパスワードを入力せずにWindowsで認証できます。
WindowsでのSSHキーペアの生成
OpenSSHを実行しているリモートWindowsホストへの接続に使用するクライアントコンピューター上に2つのSSHキー(パブリックとプライベート)を生成する必要があります。 秘密鍵はクライアント側に保存され(鍵を安全に保管し、誰とも共有しないでください!)、公開鍵がに追加されます。 authorized_keys SSHサーバー上のファイル。 WindowsクライアントでRSAキーを生成するには、OpenSSHクライアントをインストールする必要があります。
Windows10/11およびWindowsServer2019/2022では、PowerShellを使用してOpenSSHクライアントがオプションのWindows機能としてインストールされます。
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
標準の(昇格されていない)PowerShellセッションを開き、次のコマンドを使用してED25519キーのペアを生成します。
ssh-keygen -t ed25519
デフォルトでは、ssh-keygenツールはRSA2048キーを生成します。 現在、RSAキーの代わりにED25519を使用することをお勧めします。
秘密鍵を保護するためのパスワードを入力するように求められます。 パスワードを指定すると、SSH認証にこのキーを使用するたびにパスワードを入力する必要があります。 パスフレーズを入力しませんでした(推奨されません)。
Generating public/private ed25519 key pair. Enter file in which to save the key (C:Usersmyuser/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:Usersmyuser/.ssh/id_ed25519. Your public key has been saved in C:Usersmyuser/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:xxxxxxxx myuser@computername The key's randomart image is: +--[ED25519 256]--+ +----[SHA256]-----+
Ssh-keygenは .ssh 現在のWindowsユーザーのプロファイル内のディレクトリ(%USERPROFILE%.ssh
)そして2つのファイルを生成します:
id_ed25519
–秘密鍵(RSA鍵を生成した場合、ファイルには名前が付けられますid_rsa
)。id_ed25519.pub
–公開鍵(同様のRSA鍵はid_rsa.pub
SSHキーが生成されたら、SSHエージェントサービスに秘密キーを追加できます。これにより、秘密キーを便利に管理し、認証に使用できます。
The SSHエージェント サービスは秘密鍵を保存し、現在のユーザーのセキュリティコンテキストでそれらを提供できます。 ssh-agentサービスを実行し、PowerShellサービス管理コマンドを使用して自動的に開始するように構成します。
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agent
秘密鍵をssh-agentデータベースに追加します。
ssh-add "C:Usersyouruser.sshid_ed25519"
Identity added: C:Usersyouruser.sshid_ed25519 (youruser@computername)
または次のように:
ssh-add.exe $ENV:UserProfile.sshid_rsa
OpenSSH:Windowsでの公開鍵を使用した鍵ベースの認証の構成
次に、SSH公開鍵をSSHサーバーにコピーする必要があります。 この例のSSHサーバーは、OpenSSHサービスがインストールおよび構成されているリモートのWindows11マシンです。
をコピーします id_ed25519.pub にファイルします。ssh SSHサーバーへの接続に使用するユーザーのプロファイル内のディレクトリ。 たとえば、私は user1 リモートのWindows11デバイスのアカウントなので、キーをC:Usersにコピーする必要があります。user1 .sshauthorized_keys。
SCPを使用して、クライアントからSSHサーバーに公開鍵をコピーできます。
scp C:Usersyouruser.sshid_rsa.pub admin@192.168.1.15:c:usersadmin.sshauthorized_keys
1つのauthorized_keysファイルに複数の公開鍵を追加できます。
WindowsのOpenSSHサーバーでは、公開鍵認証はデフォルトで無効になっています。 これはsshd_configで確認できます。 OpenSSHで許可されている認証方法のリストを取得する最も簡単な方法は、次のPowerShellコマンドを使用することです(Select-StringはPowerShellのgrepのアナログとして使用されます)。
cat "C:ProgramDatasshsshd_config"| Select-String "Authentication"
#PubkeyAuthentication yes #HostbasedAuthentication no #HostbasedAuthentication PasswordAuthentication yes #GSSAPIAuthentication no
この例では、 PubkeyAuthentication 行はコメント化されています。これは、この認証方法が無効になっていることを意味します。 メモ帳でsshd_configファイルを開き、次の行のコメントを解除します。
Notepad C:ProgramDatasshsshd_config
PubkeyAuthentication yes
また、を無効にする必要があります StrictModes sshd_config構成ファイルのオプション。 デフォルトでは、このモードは有効になっており、秘密鍵と公開鍵が適切に保護されていない場合、SSH鍵ベースの認証ができなくなります。 行のコメントを解除します #StrictModes yes
に変更します StrictModes no
これで、パスワードなしでWindowsSSHサーバーに接続できます。 秘密鍵のパスワード(パスフレーズ)を設定していない場合は、リモートのWindowsホストに自動的に接続します。
ネイティブSSHクライアントを使用してリモートホストに接続するには、次のコマンドを使用します。
ssh (username)@(SSH server name or IP address)
例えば:
ssh admin@192.168.1.15
これは、IPアドレスを使用してリモートSSHサーバーに接続することを意味します 192.168.1.15 下 user1 アカウント。 SSH Agentサービスは、リモートホストでの認証に秘密鍵を自動的に使用しようとします。
- ssh-agentサービスを使用してSSHキーを管理したくない場合は、SSH認証に使用する秘密キーファイルへのパスを指定できます。
ssh user1@192.168.1.15 -i "C:Usersyouuser.sshid_ed25519"
- Active Directoryドメインのユーザーアカウントを使用してSSHホストに接続するには、次の形式を使用します。
ssh jsmith@woshub.com@192.168.1.15 -i <private_key_absolute_path>
初めて接続するときは、SSHサーバーキーのフィンガープリントを信頼できるリストに追加する必要があります。 タイプ はい -> 入る。
The authenticity of host '192.168.1.15 (192.168.1.15)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
ETWログはWindowsOpenSSHで使用され、プレーンテキストファイルの代わりにSSHログを保存します。 SSHキーベースの認証ログは、Windowsイベントビューアで確認できます([アプリケーションとサービスのログ]->[OpenSSH]->[操作])。
秘密鍵を使用したSSH接続が成功すると、OpenSSHログに次のイベントが表示されます。
EventID 4 sshd: Accepted publickey for locadm from 192.168.15.20 port 55772 ssh2: ED25519 SHA256:xxxxxxx
秘密鍵を使用してSSHサーバーに接続できず、パスワードの入力を求められる場合は、接続しようとしているユーザーアカウントがローカルのWindows管理者グループ(グループSIDは S-1-5-32-544
)。 後で説明します。
管理ユーザーの下でSSHキーを使用してWindowsをログに記録する
OpenSSHは、Windowsの管理者ユーザーアカウントに特別なキーベースの認証設定を使用します。
C: ProgramData sshを使用する必要がありますadministrators_authorized_keys の代わりにファイル authorized_keys ユーザープロファイルを入力します。 このテキストファイルに公開SSHキーを追加します(セキュリティ上の理由から、管理者とシステムグループのみがこのファイルを読み取る権限を持っている必要があります)。
次のコマンドを使用して、ファイルのNTFSアクセス許可を変更できます。
- icaclsツール:
icacls.exe "C:ProgramDatasshadministrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
- または、Get-AclおよびSet-AclPowerShellコマンドレットを使用します。
get-acl "$env:programdatasshssh_host_rsa_key" | set-acl "$env:programdatasshadministrators_authorized_keys"
その後、StrictModesが無効になっていてもSSHキー認証が機能します。
#Match Group administrators # AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
さらに、sshd_configでSSHパスワードログインを無効にすることができます。
PasswordAuthentication no
sshd_configに変更を加えた後、sshdサービスを再起動することを忘れないでください。
restart-service sshd
PasswordAuthentication noを設定し、SSHキー認証を誤って設定すると、ssh経由で接続するときにエラーが表示されます。
user1@192.168.13.15: Permission denied (publickey,keyboard-interactive).
DenyGroups Administrators
したがって、キーペアを使用してWindowsでSSH認証を構成しました。 これで、この認証方法を使用して、リモートサーバーに安全にアクセスし、SSHトンネル内のポートを自動的に転送し、スクリプトを実行し、その他の自動化タスクを実行できます。
The post WindowsでのSSH公開鍵認証の構成 appeared first on Gamingsym Japan.