SSH (Secure Shell) によるマシン間接続を有効にするには、接続元のマシンで SSH のキーペア(秘密鍵+公開鍵)を作成し、接続先のマシンに公開鍵を登録する必要があります。
ここでは OpenSSH の ssh-keygen
コマンドを使用した SSH キーの作成方法を紹介します。
SSH 鍵の作成
ssh-keygen
コマンドをオプションなしで実行すると、SSH キー(秘密鍵+公開鍵)を作成できます(SSH プロトコル ver.2 用)。
デフォルトでは暗号アルゴリズムとして RSA を使用するキーが生成されますが、-t
オプションで暗号アルゴリズムを指定することができます。
-t オプション | アルゴリズム | 説明 |
---|---|---|
rsa | RSA 鍵 | 4096 bits の長い鍵長を選べば強度は出るが遅くなる |
ecdsa ★おすすめ2 | ECDSA 鍵 | 楕円曲線暗号。少ない鍵長で強度あり。ED25519 より普及している |
ed25519 ★おすすめ1 | Ed25519 鍵 | 楕円曲線暗号。少ない鍵長で強度あり。ECDSA より高速 |
dsa | DSA 鍵 | (非推奨)SSH2 の環境で使えるが、1024 bits しか選べないことが多い |
rsa1 | RSA1 鍵 | (非推奨)SSH1 のレガシー環境用。強度が弱いので使わない方がよい |
実際に ssh-keygen
コマンドを実行すると、パスワード (passphrase) の入力を求められるので、秘密鍵を使用する際のパスワードを設定しておきます。
このパスワードは、ssh
コマンドでリモートホストに接続する際に入力することになります。
パスワード入力時に、何も入力せずに
例えば、上記のようにデフォルトの RSA 鍵を生成した場合は、次の 2 つのファイルが ~/.ssh
ディレクトリに保存されます(ディレクトリが存在しなければ自動的に作成されます)。
~/.ssh/id_rsa
… 秘密鍵 (private key)~/.ssh/id_rsa.pub
… 公開鍵 (public key)
公開鍵 (id_rsa.pub
) は接続先ホストに登録する情報で、秘密鍵 (id_rsa
) は SSH 接続時にクライアント側で使うファイルです。
接続先への公開鍵の登録
SSH のキーペアを作成したら、公開鍵ファイルの内容を接続先ホストの ~/.ssh/authorized_keys
ファイルに登録することで、この PC から SSH 接続が可能になります。
この登録作業は、ssh-id-copy
コマンドを使うと簡単に済ませることができます(参考: ssh-id-copy で SSH の公開鍵をリモートホストに登録する)。
これで、SSH キーを使った接続が可能になります。
どのタイプの SSH キーを作成すべきか?
パフォーマンスや安全度を考慮すると、楕円曲線暗号の Ed25519 アルゴリズム (-t ed25519
)、あるいは、ECDSA アルゴリズム (-t ecdsa
) を使用しておくのがよさそうです(2022 年現在)。
可能であれば、ECDSA よりも高速な Ed25519 を使うのがよいです。
$ ssh-keygen -t ed25519
GitHub の公式ドキュメントでも、SSH 鍵の作成方法として、Ed25519 鍵の作成例 が示されています(2022 年時点)。
昔は、RSA 4096 bits の作成例が示されていましたが(2016 年時点)、現状は上記の方法で作成した方がパフォーマンスがよくなります。
米国 NIST の提示している暗号化方式としては、2031 年以降は下記のものしか使えなくなるとあります(参考: 米国における暗号技術をめぐる動向(2016年10月): 図表10)。
- RSA/DSA 3072 bit 以上
- ECDSA 256 bit 以上