本記事について
SSHの公開鍵認証において、
Windowsのオプション機能として用意されている OpenSSH for Windows から ssh-agent を利用してSSH接続する手順です。
変につまづいたので残しておきます。
環境
- Windows10 Pro 1803
OpenSSH インストール
> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
> Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
ssh-agent サービス設定
-
services.mscを管理者権限で起動 -
サービス(ローカル)の中からOpenSSH Authentication Agentを探す - 右クリックメニューの
プロパティを開く -
スタートアップの種類を自動にし、サービスを開始
以上でシステム起動時に ssh-agent が自動起動される。
秘密鍵
C:\Users\<USER_NAME>\.ssh ディレクトリ以下に作成・管理する。
.ssh ディレクトリ
存在しなければ作成。
mkdir $env:userprofile\.ssh
次にアクセス制御リスト(ACL)の設定を行い、アクセスできるのは所有者のみにする。
-
.sshディレクトリを右クリック ->プロパティ -
OK
秘密鍵の作成
C:\Users\<USER_NAME>\.ssh ディレクトリ以下に作成する。
ssh-keygen -t ed25519 -C "$env:username" -f $env:userprofile\.ssh\id_ed25519
デフォルトで C:\Users\<USER_NAME>\.ssh のACL設定を継承しているため、.ssh ディレクトリの設定ができていれば後述のパーミッションエラーは発生しないはず。
C:\Users\<USER_NAME>\.ssh\config ファイルの作成
SSH接続の設定を記述することで、ssh コマンドを打つときに楽になる。
SSHポート変更や公開鍵認証を使う場合はこの設定ファイルを記述すること推奨。
この config ファイル作成については
が参考になります(詳細は割愛)。
ssh-agent に秘密鍵とパスフレーズのペアを登録
ssh-agent に秘密鍵とパスフレーズのペアを登録し、SSH接続時にパスフレーズを入力せずに接続できるようにする。
ssh-add <秘密鍵のパス> コマンドを実行し、鍵のパスフレーズを入力。
> ssh-add $env:userprofile\.ssh\id_ed25519
Enter passphrase for $env:userprofile\.ssh\id_ed25519:
Identity added: $env:userprofile\.ssh\id_ed25519 (USER_NAME)
登録リストの表示。
> ssh-add -l
256 SHA256:hogehoge... USER_NAME (ED25519)
以上でパスフレーズ入力なしでリモートにSSH接続できるようになっているはず。
> ssh REMOTE_HOST
[hoge@server ~]$
失敗する場合は config ファイルを見直したり、下記のエラーが発生していないか確認してください。
遭遇したエラー
WARNING: UNPROTECTED PRIVATE KEY FILE!
ssh-add コマンドを打つときに発生したパーミッションエラー。
> ssh-add $env:userprofile\.ssh\id_ed25519
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '$env:userprofile\\.ssh\\id_ed25519' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
ACL設定ができていないことが原因。
上記 を参考に、秘密鍵のあるディレクトリにおいて 所有者のみがアクセス許可を持つ ように設定する。
ssh* コマンドが認識されない
OpenSSHのインストールは成功したのにコマンドとして認識してくれない症状。
powershell の再起動はもちろん、PC再起動してもダメ。
環境変数 PATH を確認してみると、なぜか SystemRoot がうまく展開されていない。
この解決策として、PowerShellからのPATH設定がなんかうまくいかない話。 を参考にGUIからパスを切り取り&貼り付けしたら PATH が通るようになった。
そういうとこやぞ、Windows 😡😡😡



