↓メインコンテンツへスキップ

SSH用キーの作り方と登録方法まとめ

·

要旨 #

Linux および Windows で OpenSSH の公開鍵・秘密鍵ペアを作成する際の手順をまとめておく。

2025-12-21 更新: 最新OSでの OpenSSH/SSLライブラリバージョンを反映。

SSH設定フォルダ #

クライアント接続用の秘密鍵・公開鍵・その他各種設定ファイルがデフォルトで配置される。

OSシェル設定ベースフォルダ(シェル表記)例
Linuxbash~/.ssh//home/USER1/.ssh/
WindowsPowerShell${env:USERPROFILE}\.ssh\\Users\USER1\.ssh\

使用可能な証明書アルゴリズム #

OS のバージョン(ディストリビューション) ごとに OpenSSH/OpenSSL の世代が異なるため、対応可能な証明書アルゴリズムの形式が異なる。

OS/VersionリリースSSHパッケージSSLライブラリRSAECDSAEd25519
CentOS 32004年OpenSSH 3.6.1p2OpenSSL 0.9.7a✔--
CentOS 42005年OpenSSH 3.9p1OpenSSL 0.9.7a✔--
CentOS 52007年OpenSSH 4.3p2OpenSSL 0.9.8e✔--
CentOS 62011年OpenSSH 5.3p1OpenSSL 1.0.1e✔✔-
CentOS 72014年OpenSSH 7.4p1OpenSSL 1.0.2k✔✔✔
CentOS 82019年OpenSSH 8.0p1OpenSSL 1.1.1c✔✔✔
CentOS Stream 82020年OpenSSH 8.0p1OpenSSL 1.1.1?✔✔✔
CentOS Stream 92021年OpenSSH 8.7p1OpenSSL 3.0.?✔✔✔
CentOS Stream 102025年OpenSSH 9.9p1OpenSSL 3.x.x✔✔✔
Rocky Linux 92021年OpenSSH 8.7p1OpenSSL 3.x.x✔✔✔
Rocky Linux 102025年OpenSSH 9.9p1OpenSSL 3.x.x✔✔✔
Windows Server 2019 (1809)2018年OpenSSH 7.7p1LibreSSL 2.6.5✔✔✔
Windows Server 2022 (21H2)2022年OpenSSH 8.1p1LibreSSL 3.0.2✔✔✔
Windows Server 2025 (24H2)2024年OpenSSH 9.5p1LibreSSL 3.3.6✔✔✔
Windows 10 (1803)2018年OpenSSH 7.6p1LibreSSL 2.6.4✔✔✔
Windows 10 (1809)2018年OpenSSH 7.7p1LibreSSL 2.6.5✔✔✔
Windows 10 (1903)2019年OpenSSH 7.7p1LibreSSL 2.6.5✔✔✔
Windows 10 (1909)2019年OpenSSH 7.7p1LibreSSL 2.6.5✔✔✔
Windows 10 (2009)2020年OpenSSH 7.7p1LibreSSL 2.6.5✔✔✔
Windows 10 (20H2)2020年OpenSSH 7.7p1LibreSSL 2.6.5✔✔✔
Windows 10 (21H1)2021年OpenSSH 8.1p1LibreSSL 3.0.2✔✔✔
Windows 10 (21H2)2021年OpenSSH 8.1p1LibreSSL 3.0.2✔✔✔
Windows 10 (22H2)2022年OpenSSH 8.1p1LibreSSL 3.0.2✔✔✔
Windows 11 (21H2)2021年OpenSSH 8.1p1LibreSSL 3.0.2✔✔✔
Windows 11 (22H2)2022年OpenSSH 8.6p1LibreSSL 3.4.3✔✔✔
Windows 11 (23H2)2023年OpenSSH 9.5p1LibreSSL 3.8.2✔✔✔
Windows 11 (24H2)2024年OpenSSH 9.5p1LibreSSL 3.8.2✔✔✔
Windows 11 (25H2)2025年OpenSSH 9.5p2LibreSSL 3.8.2✔✔✔
macOS 10.10 Yosemite2014年OpenSSH 6.2p2OSSLShim 0.9.8r✔--
macOS 10.11 El Capitan2015年OpenSSH 6.9p1LibreSSL 2.1.7✔✔✔
macOS 10.12 Sierra2016年OpenSSH 7.2p2LibreSSL 2.4.1✔✔✔
macOS 10.13 High Sierra2017年OpenSSH 7.7p1LibreSSL 2.6.2✔✔✔
macOS 10.14 Mojave2018年OpenSSH 7.9p1LibreSSL 2.7.3✔✔✔
macOS 10.15 Catalina2019年OpenSSH 8.1p1LibreSSL 2.7.3✔✔✔
macOS 11.x Big Sur2020年OpenSSH 8.1p1LibreSSL 2.7.3✔✔✔
macOS 12.x Monterey2021年OpenSSH 8.6p1LibreSSL 2.8.3✔✔✔
macOS 13.x Ventura2022年OpenSSH 9.0p1LibreSSL 3.3.6✔✔✔
macOS 14.x Sonoma2022年OpenSSH 9.6p1LibreSSL 3.3.6✔✔✔
macOS 15.0~4 Sequoia2024年OpenSSH 9.8p1LibreSSL 3.3.6✔✔✔
macOS 15.5~ Sequoia2025年OpenSSH 9.9p2LibreSSL 3.3.6✔✔✔
macOS 26.x~ Tahoe2025年OpenSSH 10.0p2LibreSSL 3.3.6✔✔✔
  • いずれも最終アップデートまで更新した時点のもの
  • CentOS/Rocky Linux の最近のバージョンは、マイナーアップグレードと共に OpenSSL の 3.x.y のサブバージョン x から更新されるようになった模様
  • 2025年12月追記: OpenSSH / SSL ライブラリにおいて、耐量子計算機暗号 (PQC - Post-Quantum Cryptography) の標準化・実装が進んでおり、一部のバージョンでは利用可能ではあるが、残念ながらまだ一般的ではない。特に Linux 以外での採用が多い LibreSSL の PQC 実装が遅れており、現時点では Linux 間の接続にしか使用できない模様である。

キーのアルゴリズムの選択 #

接続キーのアルゴリズムは下記の順で選択する。

  1. Ed25519
  2. ECDSA (521bit)
  3. RSA (SSH2-RSA 2048bit以上)
  4. DSA (非推奨)

OpenSSH/OpenSSL のバージョンによって利用できるアルゴリズムが異なる。クライアント側は Ed25519, ECDSA, RSA の3種類のキーペアを作っておき、接続先がサポートするもっとも推奨順の高いアルゴリズムのキーを使うのが望ましい。

キーペア作成方法 #

RSA, ECDSA, Ed25519 形式のキーペア (秘密鍵+公開鍵) をそれぞれ一発作成するコマンド。

コメントに「作成したユーザーとホスト名」を入れ、パスフレーズ「なし」の場合。

Linux OpenSSH (bash) #

ssh-keygen -t ed25519 -q -N "" -C ${USER}@${HOSTNAME} -f ~/.ssh/id_ed25519
ssh-keygen -t ecdsa -b 521 -q -N "" -C ${USER}@${HOSTNAME} -f ~/.ssh/id_ecdsa
ssh-keygen -t rsa -b 2048 -q -N "" -C ${USER}@${HOSTNAME} -f ~/.ssh/id_rsa

Windows OpenSSH (PowerShell) #

Windows コマンドラインでは「空の文字列」を指定するのに特殊な表記が必要。

ssh-keygen -t ed25519 -q -N '""' -C "${env:USERNAME}@${env:COMPUTERNAME}" -f ${env:USERPROFILE}/.ssh/id_ed25519
ssh-keygen -t ecdsa -b 521 -q -N '""' -C "${env:USERNAME}@${env:COMPUTERNAME}" -f ${env:USERPROFILE}/.ssh/id_ecdsa
ssh-keygen -t rsa -b 2048 -q -N '""' -C "${env:USERNAME}@${env:COMPUTERNAME}" -f ${env:USERPROFILE}/.ssh/id_rsa

接続先サーバに公開鍵を登録 #

接続先の SSH サーバに作成したキーを登録するには、接続先サーバの

(ホームディレクトリ)/.ssh/authorized_keys

に接続元の ./ssh/id_xxx.pub の内容を追記する。が、この作業が意外と手間なので、オリジナル OpenSSH パッケージには専用のスクリプトが同梱されている。authorized_key ファイルが存在しなければ作成し、パーミッションも正しく設定される。

Linux (CentOS 5/6) クライアント → Linux サーバ #

REMOTEUSER=xxxx
REMOTEHOST=yyyy
ssh-copy-id -i ${HOME}/.ssh/id_ed25519.pub ${REMOTEUSER}@${REMOTEHOST}
ssh-copy-id -i ${HOME}/.ssh/id_ecdsa.pub ${REMOTEUSER}@${REMOTEHOST}
ssh-copy-id -i ${HOME}Administrat/.ssh/id_rsa.pub ${REMOTEUSER}@${REMOTEHOST}

Linux (CentOS 7/8) クライアント → Linux サーバ #

CentOS 7 以降搭載の OpenSSH では、(yes/no) と聞かれてしまうことを防止できる。

REMOTEUSER=xxxx
REMOTEHOST=yyyy
ssh-copy-id -o StrictHostKeyChecking=no -i ${HOME}/.ssh/id_ed25519.pub ${REMOTEUSER}@${REMOTEHOST}
ssh-copy-id -o StrictHostKeyChecking=no -i ${HOME}/.ssh/id_ecdsa.pub ${REMOTEUSER}@${REMOTEHOST}
ssh-copy-id -o StrictHostKeyChecking=no -i ${HOME}/.ssh/id_rsa.pub ${REMOTEUSER}@${REMOTEHOST}

Windows OpenSSH クライアント → Linux サーバ #

Windows (SSHクライアント) → Linux (SSHクライアント) の場合

Windows は ssh-copy-id のような bash スクリプトが使えないので、ワンライナーコマンドで代用する。

$REMOTEUSER = "xxxx"
$REMOTEHOST = "yyyy"
Get-Content ${env:USERPROFILE}/.ssh/id_ed25519.pub | ssh ${REMOTEUSER}@${REMOTEHOST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
Get-Content ${env:USERPROFILE}/.ssh/id_ecdsa.pub | ssh ${REMOTEUSER}@${REMOTEHOST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
Get-Content ${env:USERPROFILE}/.ssh/id_rsa.pub | ssh ${REMOTEUSER}@${REMOTEHOST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"

※エラーハンドリングはないので注意

接続先ホストが Windows sshd でAdministrator 権限で接続 #

特別なファイルに公開鍵を登録する必要がある。

${env:ProgramData}/ssh/administrators_authorized_keys

GUI で登録する場合は、管理者権限でメモ帳で開いてから貼り付ける。

notepad ${env:ProgramData}/ssh/administrators_authorized_keys

課題 #

  • Windows SSH クライアント → Windows SSH サーバ
  • Linux SSH クライアント → Windows SSH サーバ

の組み合わせで、ssh-copy-id のような一発登録する方法は現段階段階では不明。

双方に PowerShell 7 を入れて Remote-Sesion で接続してから PowerShell で実行すればできそうだが、手段が目的化しそうなのでそこまでは追求しないことにする。