LoginSignup
43
37

More than 3 years have passed since last update.

OpenSSH for Windows の使用方法

Last updated at Posted at 2019-06-23

本記事について

SSHの公開鍵認証において、
Windowsのオプション機能として用意されている OpenSSH for Windows から ssh-agent を利用してSSH接続する手順です。

変につまづいたので残しておきます。

環境

  • Windows10 Pro 1803

OpenSSH インストール

powershell(管理者)
> 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 サービス設定

  1. services.msc を管理者権限で起動
  2. サービス(ローカル) の中から OpenSSH Authentication Agent を探す
  3. 右クリックメニューの プロパティ を開く
  4. スタートアップの種類自動 にし、サービスを開始

以上でシステム起動時に ssh-agent が自動起動される。

秘密鍵

C:\Users\<USER_NAME>\.ssh ディレクトリ以下に作成・管理する。

.ssh ディレクトリ

存在しなければ作成。

powershell
mkdir $env:userprofile\.ssh

次にアクセス制御リスト(ACL)の設定を行い、アクセスできるのは所有者のみにする。

  1. .ssh ディレクトリを右クリック -> プロパティ

  2. セキュリティ タブの 詳細設定
    security-1.png

  3. 継承の無効化
    security-2.png

  4. 継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します
    12-33-48.png

  5. 所有者以外のユーザー(SYSTEMやAdministrators)を 削除
    security-4.png

  6. OK

秘密鍵の作成

C:\Users\<USER_NAME>\.ssh ディレクトリ以下に作成する。

ed25519鍵の作成例
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 😡😡😡

参考

43
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
37