Windows環境にOpenSSHをインストールして、公開鍵認証の設定を行いました。
#使用した環境
-
OpenSSHのサーバー
Windows Server 2012 R2
Win32-OpenSSH 0.0.24.0(64-bit)
PSTools 2.45 -
OpenSSHのクライアント
Windows Server 2008 R2
Win32-OpenSSH 0.0.24.0(64-bit)
PSTools 2.45
たまたま使える環境がこの2台だったためOSが揃っていませんが、この組み合わせでなければいけないということはありません。
#Win32-OpenSSHのインストール
Win32-OpenSSHは、サーバー側、クライアント側の両方にインストールします。
以下の手順でインストールしました。
- 「https://github.com/PowerShell/Win32-OpenSSH/releases」から「OpenSSH-Win64.zip」をダウンロードします。
32 bit OSの場合は、「OpenSSH-Win32.zip」を使用してください。 - 「OpenSSH-Win64.zip」を展開し、任意の場所に配置します。
- Windows Powershellを管理者で起動します。
- 以下のコマンドを実行します。
cd “OpenSSH-Win64.zipの展開先フォルダパス”
Set-ExecutionPolicy Unrestricted
.\install-sshd.ps1
ssh-keygen.exe –A
.\FixHostFilePermissions.ps1 -Confirm:$false
Set-ExecutionPolicy Restricted
- Windowsサービス画面で[ssh-agent]を起動します。
- 「https://docs.microsoft.com/ja-jp/sysinternals/downloads/pstools」からPsToolsをダウンロードし、任意の場所に展開します。
- コマンド プロンプトを管理者で起動し、以下のコマンドを実行します。
cd “PSTools展開先フォルダパス”
psexec.exe -i -s cmd.exe
- 新たに起動されたコマンド プロンプトで以下のコマンドを実行します。
ssh-add ssh_host_dsa_key
ssh-add ssh_host_rsa_key
ssh-add ssh_host_ecdsa_key
ssh-add ssh_host_ed25519_key
- Windows ファイアウォールの詳細設定でsshdの受信を許可します。
- Windowsサービス画面で[ssh-agent]と[sshd]のスタートアップの種類を自動にし、サービスを開始します
#公開鍵認証の設定(クライアント側)
クライアント側のマシンに公開鍵認証の設定を行います。
- コマンド プロンプトを起動し、以下のコマンドを実行します。
ssh-keygen -t rsa -f id_rsa
net start ssh-agent
ssh-add id_rsa
1行目のssh-keygenコマンドを実行するとpassphraseを聞いてくるので、空を指定します。
#公開鍵認証の設定(サーバー側)
サーバー側のマシンに公開鍵認証の設定を行います。
- クライアント側に作成された「id_rsa.pub」ファイルをリモートサーバーにコピーします。
- コピー元:クライアント側の「OpenSSH-Win64.zipの展開先フォルダ\id_rsa.pub」
- コピー先:サーバー側の「%systemdrive%\Users<user>.ssh\authorized_keys」
- 配置した「authorized_keys」のプロパティ画面でアクセス許可に「NT Service\sshd」を追加し、[読み取り]を許可します。
[読み取り]以外の項目を許可するとエラーになるため、[読み取り]のみを許可する必要があります!
#確認
クライアント側のマシンでコマンド プロンプトを起動し、以下のコマンドを実行します。
cd “OpenSSH-Win64.zipの展開先フォルダパス”
ssh -i .\id_rsa user@host
2行目のuser部分にはサーバー側の設定でコピー先パスの部分に指定したユーザーを、host部分にはサーバー側のマシン名を指定します。
続けて、以下のコマンドを実行します。
Are you sure you want to continue connecting (yes/no)?
「yes」と入力して[Enter]キーを押します。
コマンド プロンプトのウィンドウタイトルが「OpenSSH SSH client」に切り替わったら、リモートログイン成功です。
#参考URL