本記事について
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 😡😡😡