もっと詳しく

この記事では、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

Windowsのユーザープロファイルのパブリックおよびプライベートsshキー

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)

Windowsのssh-agentにssh秘密鍵を追加する

または次のように:

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。

Windowsユーザーのプロファイルフォルダーにある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

Windowsのopensshで公開鍵認証を有効にする

この例では、 PubkeyAuthentication 行はコメント化されています。これは、この認証方法が無効になっていることを意味します。 メモ帳でsshd_configファイルを開き、次の行のコメントを解除します。

Notepad C:ProgramDatasshsshd_config

PubkeyAuthentication yes

Windows:sshd_configでパブリックキー認証を有効にします

また、を無効にする必要があります StrictModes sshd_config構成ファイルのオプション。 デフォルトでは、このモードは有効になっており、秘密鍵と公開鍵が適切に保護されていない場合、SSH鍵ベースの認証ができなくなります。 行のコメントを解除します #StrictModes yes に変更します StrictModes no

sshd-config-厳密モードを無効にする
これで、パスワードなしでWindowsSSHサーバーに接続できます。 秘密鍵のパスワード(パスフレーズ)を設定していない場合は、リモートのWindowsホストに自動的に接続します。

ネイティブSSHクライアントを使用してリモートホストに接続するには、次のコマンドを使用します。

ssh (username)@(SSH server name or IP address)

例えば:

ssh admin@192.168.1.15

これは、IPアドレスを使用してリモートSSHサーバーに接続することを意味します 192.168.1.15user1 アカウント。 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>

Windowsの信頼できるホストリストにキーフィンガープリントを追加する

初めて接続するときは、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

Windows11のイベントビューアでのパブリックキーベースの認証

秘密鍵を使用してSSHサーバーに接続できず、パスワードの入力を求められる場合は、接続しようとしているユーザーアカウントがローカルのWindows管理者グループ(グループSIDは S-1-5-32-544)。 後で説明します。

秘密鍵(パスワードなし)を使用してssh経由でウィンドウにアクセスする

管理ユーザーの下でSSHキーを使用してWindowsをログに記録する

OpenSSHは、Windowsの管理者ユーザーアカウントに特別なキーベースの認証設定を使用します。

C: ProgramData sshを使用する必要がありますadministrators_authorized_keys の代わりにファイル authorized_keys ユーザープロファイルを入力します。 このテキストファイルに公開SSHキーを追加します(セキュリティ上の理由から、管理者とシステムグループのみがこのファイルを読み取る権限を持っている必要があります)。

Windowsのadministrators_authorized_keysファイル

次のコマンドを使用して、ファイルの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"

Windowsのadministrators_authorized_keysファイルの権限を変更する

その後、StrictModesが無効になっていてもSSHキー認証が機能します。

ユーザープロファイルからauthorized_keysファイルを使用し、公開鍵情報をadministrators_authorized_keysファイルに移動しないようにするために、OpenSSH構成ファイル(C: ProgramData ssh )の行をコメントアウトできます。sshd_config)。

#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

sshd_config 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).

Windows sshログインエラー:アクセスが拒否されたパブリックキーキーボードインタラクティブ

あなたは使用することができます PermitRootLogin Linux上のOpenSSHのオプションで、SSHルートログインを制限します。 このディレクティブはWindowsOpenSSHには適用されないため、 DenyGroups 管理者アカウントでsshログインを拒否するパラメータ:

DenyGroups Administrators

したがって、キーペアを使用してWindowsでSSH認証を構成しました。 これで、この認証方法を使用して、リモートサーバーに安全にアクセスし、SSHトンネル内のポートを自動的に転送し、スクリプトを実行し、その他の自動化タスクを実行できます。

The post WindowsでのSSH公開鍵認証の構成 appeared first on Gamingsym Japan.