SSHコマンドやリモートホストと定期的にやり取りする場合は、パスワードの代わりにキーペアを使用すると便利な場合があります。リモートシステムが接続ごとにパスワードの入力を求める代わりに、公開鍵と秘密鍵のペアを使用して認証を自動的にネゴシエートできます。
秘密鍵は自分のワークステーションで安全に保たれ、公開鍵はアクセスする各リモートシステムの特定の場所に配置されます。秘密鍵は、パスフレーズを使用してローカルで保護される場合があります。 ssh-agent
などのローカルキャッシュプログラム またはgnome-keyring
キーを使用してリモートシステムにアクセスするたびにではなく、定期的にそのパスフレーズを入力できます。
[無料ダウンロード:高度なLinuxコマンドのチートシート。 ]
キーペアの生成と公開キーの伝播
キーペアの生成と公開キーの伝播は、思ったよりも簡単です。それを見ていきましょう。
キーペアを生成するための最小限の労力には、 ssh-keygen
の実行が含まれます。 コマンドを実行し、すべてのプロンプトでデフォルトを選択します:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/training/.ssh/id_rsa):
Created directory '/home/training/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/training/.ssh/id_rsa.
Your public key has been saved in /home/training/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:qOoqJFfbfnBFMZ6WFsZQZfy6WXTfcknQEd0B+quTjHw [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| .+*+o.o+*|
| oo*o. .o|
| .*. .. |
| . . o. . o..|
| . o. S. +..+|
|... ..o . . +.+|
|o. .. o. o .= o |
|. . . .o E+ |
|ooo . ... |
+----[SHA256]-----+
キーを保存するデフォルトの場所は、〜/ .ssh
です。 ディレクトリ。存在しない場合は作成されます:
$ ls -al .ssh
total 16
drwx------. 2 training training 4096 Aug 12 07:43 .
drwx------. 5 training training 4096 Aug 12 07:43 ..
-rw-------. 1 training training 1843 Aug 12 07:43 id_rsa
-rw-r--r--. 1 training training 415 Aug 12 07:43 id_rsa.pub
このコマンドでディレクトリの作成を許可すると、所有者と権限が正しく設定されます。一部のアプリケーションは、秘密鍵へのアクセス許可が公開されている場合、鍵を使用しません。
.pub
で終わるファイル リモートシステムに転送する必要がある公開鍵です。これは、プロトコル、キー、および識別子として使用される電子メールの1行を含むファイルです。 ssh-keygen
のオプション コマンドを使用すると、別の識別子を指定できます:
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ4SCcMX1EK31G/qLyCs3PaFcWkx0QA61OwQNHYztvrg7iD/etN4S5UP6ugHjTcUvqD/fZJFBJeryK0Hz0FzejKYiJBxQuUqadyXFSW30VnW6mAzgNoz20rGc2mipUrsaqdBWWv5U7vX8sgjEHEgVHzq6pfWj681PtikJ8Dss1IvPiPvOoRz2jb1dQnnrAVqMDGeWbm4yjYQamPvnLo1Hy23NgXpZ7KXv9PuDDu3tqcoMUqFk7sHswMrCCUY9SWOD5JBbhD3JX4LPs68WWbETOqOQ3a9ebTsL3wRPSbuu/djhL9Qmd8fN2OaM2U2zFpeE3NzBq4KT/ml6RTv44EMuh [email protected]
キーペアを生成した後、 ssh-keygen
コマンドは、このキーに固有の指紋とランダムアート画像も表示します。この情報は、公開鍵を確認する必要がある可能性のある他の人と共有できます。
後でこれらを表示できます:
$ ssh-keygen -lv
Enter file in which the key is (/home/training/.ssh/id_rsa):
-l </ code> オプションには、指紋と
-v
が一覧表示されます オプションはASCIIアートを追加します。
パスワード認証が現在有効になっている場合、公開鍵をリモートホストに転送する最も簡単な方法は、 ssh-copy-id
を使用することです。 指図。キーにデフォルト名を使用した場合、指定する必要があるのはリモートユーザーとホストだけです。
$ ssh-copy-id susan@streamer
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/training/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
susan@streamer's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'susan@streamer'"
and check to make sure that only the key(s) you wanted were added.
出力の指示に従って、キーペアを使用して接続できることを確認します。パスフレーズを実装した場合は、秘密鍵を使用するためのパスフレーズの入力を求められます:
$ ssh susan@streamer
Last login: Sat Aug 10 14:09:33 2019 from X.X.X.X
結果の許可されたキーファイルを調べます。これは、公開鍵が追加された場所です。ディレクトリまたはファイルが存在しなかった場合は、正しい所有権と権限で作成されました(または作成されました)。各行は単一の承認された公開鍵です:
[susan@streamer ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZ4SCcMX1EK31G/qLyCs3PaFcWkx0QA61OwQNHYztvrg7iD/etN4S5UP6ugHjTcUvqD/fZJFBJeryK0Hz0FzejKYiJBxQuUqadyXFSW30VnW6mAzgNoz20rGc2mipUrsaqdBWWv5U7vX8sgjEHEgVHzq6pfWj681PtikJ8Dss1IvPiPvOoRz2jb1dQnnrAVqMDGeWbm4yjYQamPvnLo1Hy23NgXpZ7KXv9PuDDu3tqcoMUqFk7sHswMrCCUY9SWOD5JBbhD3JX4LPs68WWbETOqOQ3a9ebTsL3wRPSbuu/djhL9Qmd8fN2OaM2U2zFpeE3NzBq4KT/ml6RTv44EMuh [email protected]
この鍵ペアのアクセスを取り消すには、公開鍵の行を削除します。
アクセスを制御するために許可されたキーファイルのこの行に追加できる他の多くのオプションがあります。これらのオプションは通常、制限付きのシステムに公開鍵を配置する管理者によって使用されます。これらの制限には、接続を開始できる場所、実行できるコマンド、さらにはこのキーの受け入れをいつ停止するかを示す日付が含まれる場合があります。これらおよびその他のオプションは、 sshd
にリストされています。 マニュアルページ。
秘密鍵のパスフレーズを変更する必要がある場合、または最初に空のパスフレーズを設定し、後でその保護が必要な場合は、 ssh-keygen
を使用してください。 -p
を使用したコマンド オプション:
$ ssh-keygen -p
Enter file in which the key is (/home/training/.ssh/id_rsa):
Key has comment '[email protected]'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
キーを指定するオプションを追加できます( -f
)、および古い( -P
)または新規( -N
)コマンドラインのパスフレーズ。コマンドラインで指定されたパスワードはすべてシェル履歴に保存されることに注意してください。
ssh-keygen
を参照してください 追加オプションのマニュアルページ。
公開鍵自体は共有されることを意図していますが、誰かがあなたの秘密鍵を取得した場合、その人はそれを使用して公開鍵を持つすべてのシステムにアクセスできることに注意してください。これらのキーペアには、GNU Privacy Guard(GPG)キーや公開キーインフラストラクチャ(PKI)証明書のような有効期間もありません。
秘密鍵が盗まれたか、その他の方法で侵害された疑いがある場合は、その鍵ペアを交換する必要があります。古い公開鍵をすべてのシステムから削除する必要があります。新しい鍵はssh-keygen
で生成する必要があります。 、および新しい公開鍵を目的のリモートシステムに転送する必要があります。
予防措置として、妥協の心配なしにキーをローテーションしている場合は、古いキーペアを使用して、古いキーを削除する前に新しい公開キーの転送を認証できます。
空のパスフレーズを使用するのは良い考えですか?
SSH秘密鍵の空のパスフレーズを検討する際に考慮すべきことがいくつかあります。
秘密鍵ファイルはどの程度安全ですか?
複数のクライアントシステムで作業する傾向があり、キーの複数のコピーを保持するか、リムーバブルメディアにコピーを保持する場合は、秘密キーにパスフレーズを設定することをお勧めします。この方法は、暗号化されたメディアでキーファイルへのアクセスを保護することに加えて行われます。
ただし、秘密鍵のコピーが1つしかなく、それが十分に保護され、共有されていないシステムに保持されている場合、パスフレーズを使用することは、万が一の場合に備えて、保護のもう1つのレベルにすぎません。
1つのコピーのパスフレーズを変更しても、他のコピーのパスフレーズは変更されないことに注意してください。パスフレーズは、特定のキーファイルへのアクセスをロックするだけです。
なぜ空のパスフレーズが必要だと思いますか?
パスフレーズが空のキーの場合があります。システム間でファイルを自動的に転送する必要がある一部のユーティリティでは、認証にパスワードなしの方法が必要です。 kdump
SSHを使用してカーネルをリモートシステムにダンプするように構成されている場合のユーティリティは、その一例です。
もう1つの一般的な使用法は、cronジョブなどから無人で実行するように設計されたスクリプトのキーペアを生成することです。
ミドルグラウンドの代替案はどうですか?
パスフレーズで保護された秘密鍵自体は、鍵を使用するたびにパスフレーズを入力する必要があります。この設定は、パスワードなしのSSHのようには感じられません。ただし、キーパスフレーズを一度入力してから、そのパスフレーズを再入力せずにキーを何度も使用できるキャッシュメカニズムがあります。
OpenSSHにはssh-agent
が付属しています デーモンとssh-add
ロックされていない秘密鍵をキャッシュするユーティリティ。 GNOMEデスクトップには、パスワードとシークレットを保存するだけでなく、SSHエージェントを実装するキーリングデーモンもあります。
キャッシュされたキーの有効期間は、各エージェントで、またはキーが追加されたときに構成できます。多くの場合、デフォルトで無制限の有効期間が設定されますが、ユーザーがシステムからログアウトするとキャッシュがクリアされます。ログインセッションごとに1回だけパスフレーズの入力を求められます。
ユーザーログインセッションの外部で実行する必要があるスケジュールされたアプリケーションがある場合は、シークレットまたは他のパスワードマネージャーを使用してキーのロック解除を自動化できる場合があります。たとえば、AnsibleTowerは資格情報を安全なデータベースに保存します。このデータベースには、リモートシステム(管理対象ノード)への接続に使用されるSSH秘密鍵と、それらの秘密鍵に必要なパスフレーズが含まれています。これらのクレデンシャルが保存されると、定期的にプレイブックを実行するようにジョブをスケジュールできます。
FreeIPAなどの一元化されたIDマネージャーは、キーの伝播を支援できます。公開鍵をユーザーアカウントの属性としてサーバーにアップロードし、必要に応じてドメイン内のホストに公開します。 FreeIPAは、キーを使用できる場所に追加のホストベースのアクセス制御を提供することもできます。
キーは、Ansibleモジュールを使用して配布することもできます。 openssh_keypair
モジュールはssh-keygen
を使用します キーとauthorized_key
を生成します モジュールは、特定のユーザーアカウントのSSH認証キーを追加および削除します。
SSHキーペアは、パスワードなしで認証を自動化する唯一の方法です。一元化されたユーザー管理を備えたネットワークでパスワードの使用を削減しようとする場合、Generic Security Services Application Program Interface(GSSAPI)認証を使用することも一般的です。 SSHキーペアは、シングルサインオン(SSO)がまだ利用できない場合に実装するのが簡単なオプションです。
多くのソースコードリポジトリは、SSHキーを使用してアクセスを許可します。 Fedoraアカウントシステム、GitLab、GitHubサイトなどのホスティング組織のアカウントに公開鍵をアップロードし、その鍵ペアを使用して、コンテンツをリポジトリにプルおよびプッシュするときに認証できます。