SSH キーログイン

SSH はデフォルトでパスワードを使用してログインします。単純なパスワードは安全ではなく、複雑なパスワードは覚えにくく、毎回手動で入力するのは面倒です。キーによるログインは、パスワードによるログインよりも優れたソリューションです。

鍵は何ですか?

キーは、暗号化アルゴリズムによって生成される非常に大きな数値です。対称暗号化では 1 つのキーのみが必要ですが、非対称暗号化では 2 つのキーを公開キーと秘密キーに分けてペアで使用する必要があります。

SSH キーによるログインでは非対称暗号化が使用され、各ユーザーは自分のキーを使用してログインします。このうち、秘密鍵は秘密にしておかなければならず、漏洩することができませんが、公開鍵は公開されており、外部に送信することができます。それらの関係は、公開キーと秘密キーは 1 対 1 に対応しており、各秘密キーは対応する公開キーを 1 つだけ持ち、その逆も同様です。

データが公開キーを使用して暗号化されている場合、そのデータは対応する秘密キーを使用してのみ復号化でき、逆に、秘密キーを使用してデータを暗号化すると (このプロセスは通常署名と呼ばれます)、他のキーは機能しません。対応する公開キーを使用してのみ復号化できます。

キーログインプロセス

SSH キーによるログインは次の手順に分かれています。

準備ステップとして、クライアントはssh-keygenを通じて独自の公開鍵と秘密鍵を生成します。

最初のステップは、クライアントの公開キーをリモート サーバー上の指定された場所に手動で置くことです。

2 番目のステップでは、クライアントがサーバーへの SSH ログイン要求を開始します。

3 番目のステップでは、サーバーはユーザーの SSH ログイン要求を受信し、ランダムなデータをユーザーに送信し、ユーザーに自分の身元を証明するよう要求します。

4 番目のステップでは、クライアントがサーバーからデータを受信し、秘密キーを使用してデータに署名し、それをサーバーに送り返します。

ステップ 5: クライアントから暗号化された署名を受信した後、サーバーは対応する公開キーを使用して署名を復号化し、元のデータと比較します。それらが一致する場合、ユーザーはログインを許可されます。

ssh-keygen コマンド: キーを生成する

基本的な使い方

キーを使用してログインする場合は、まず公開キーと秘密キーを生成する必要があります。 OpenSSH は、鍵を生成するためのツール プログラム ssh-keygen コマンドを提供します。

ssh-keygenを直接入力すると、プログラムは一連の質問をしてからキーを生成します。

$ ssh-keygen

通常のアプローチは、-tパラメータを使用してキーの暗号化アルゴリズムを指定することです。

$ ssh-keygen -t dsa

上記の例では、-tパラメータを使用してキーの暗号化アルゴリズムを指定します。通常、DSA アルゴリズムまたは RSA アルゴリズムが選択されます。このパラメータを省略した場合、デフォルトで RSA アルゴリズムが使用されます。

上記のコマンドを入力すると、ssh-keygenはユーザーにいくつかの質問に答えるように求めます。

$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_dsa):  press ENTER
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in /home/username/.ssh/id_dsa.
Your public key has been saved in /home/username/.ssh/id_dsa.pub.
The key fingerprint is:
14:ba:06:98:a8:98:ad:27:b5:ce:55:85:ec:64:37:19 username@shell.isp.com

上の例では、ssh-keygenコマンドを実行すると、キーが保存されているファイル名を尋ねる最初の質問が表示されます。デフォルトは~/.ssh/id_dsaファイルです。公開鍵ファイル ~/.ssh/id_dsa.pub に対応する秘密鍵の名前が自動的に生成されます。ユーザーのキーは通常、ホーム ディレクトリの .ssh ディレクトリに配置されます。

rsaアルゴリズムを選択した場合、生成される鍵ファイルはデフォルトで~/.ssh/id_rsa(秘密鍵)と~/.ssh/id_rsa.pub(公開鍵)になります。

次に、秘密キー ファイルにパスワード保護 (パスフレーズ) を設定するかどうかを尋ねる 2 番目の質問が表示されます。この場合、侵入者が秘密鍵を入手したとしても、パスワードを解読する必要があります。便宜上パスワード保護を設定したくない場合は、Enter キーを押すだけでパスワードが空になります。後でもう一度パスワードを入力するように求められますが、2 つの入力は一貫している必要があります。ここでのパスワードという英語の単語はパスフレーズであることに注意してください。これは、Linux アカウントのパスワードという単語との混同を避けるためです。つまり、これはユーザーのシステム アカウントのパスワードではありません。

最後に、秘密キーと公開キーが生成され、公開キーのフィンガープリントが、キーのソースを特定するためのコメントとして現在のユーザー名とホスト名とともに画面に表示されます。

公開キー ファイルと秘密キー ファイルはどちらもテキスト ファイルなので、テキスト エディタを使用して内容を表示できます。公開鍵ファイルの内容は次のようになります。

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvpB4lUbAaEbh9u6HLig7amsfywD4fqSZq2ikACIUBn3GyRPfeF93l/
weQh702ofXbDydZAKMcDvBJqRhUotQUwqV6HJxqoqPDlPGUUyo8RDIkLUIPRyq
ypZxmK9aCXokFiHoGCXfQ9imUP/w/jfqb9ByDtG97tUJF6nFMP5WzhM= username@shell.isp.com

上記の例では、最後の username@shell.isp.com は公開鍵に関するコメントであり、さまざまな公開鍵を識別するために使用され、どのユーザー (username) がどのホスト (shell.isp.com) に属しているかを示します。 isp.com)。)、必須ではありません。

公開キーには 1 行しかないことに注意してください。非常に長いので、上では 3 行に分けて示しています。

次のコマンドは、ユーザーのすべての公開キーを一覧表示できます。

$ ls -l ~/.ssh/id_*.pub

キーを生成した後、他の人がキーを読み取れないように権限を変更することをお勧めします。

$ chmod 600 ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa.pub

設定項目

ssh-keygenのコマンドライン設定項目は主に以下のとおりです。

(1)-b

-b パラメータはキーの 2 進数を指定します。このパラメータの値が大きいほど、キーの解読は困難になりますが、暗号化と復号化の計算オーバーヘッドも増加します。

一般に、-bは少なくとも1024である必要があり、2048以上に設定する方が安全です。

(2)-C

-C パラメータは、キー ファイルの新しいコメントを username@host の形式で指定できます。

次のコマンドは、4096 ビット RSA 暗号化アルゴリズムのキー ペアを生成し、ユーザー名とホスト名を与えます。

$ ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

(3)-f

-f パラメータは、生成される秘密鍵ファイルを指定します。

$ ssh-keygen -t dsa -f mykey

上記のコマンドは、現在のディレクトリに秘密鍵ファイル mykey と公開鍵ファイル mykey.pub を生成します。

(4)-F

-F パラメータは、ホスト名が known_hosts ファイルに存在するかどうかをチェックします。

$ ssh-keygen -F example.com

(5)-N

-N パラメータは、秘密キーのパスワード (パスフレーズ) を指定するために使用されます。

$ ssh-keygen -t dsa -N secretword

(6)-p

-p パラメータは、秘密キーのパスワード (パスフレーズ) を再指定するために使用されます。 -N との違いは、新しいパスワードがコマンド内で指定されず、実行後に入力されることです。 ssh は最初に古いパスワードを要求し、次に新しいパスワードを 2 回要求します。

(7)-R

-Rパラメータは、指定されたホスト公開鍵フィンガープリントをknown_hostsファイルから移動します。

$ ssh-keygen -R example.com

(8)-t

-t パラメータは、キーを生成するための暗号化アルゴリズム (通常は dsa または rsa) を指定するために使用されます。

公開キーを手動でアップロードします

キーが生成された後、公開キーを使用してログインする前に、公開キーをサーバーにアップロードする必要があります。

OpenSSH では、ユーザーの公開鍵がサーバーの ~/.ssh/authorized_keys ファイルに保存されることが規定されています。どのユーザーとしてサーバーにログインする場合でも、キーはユーザーのホーム ディレクトリの ~/.ssh/authorized_keys ファイルに保存する必要があります。公開キーがこのファイルに追加されている限り、公開キーをサーバーにアップロードすることと同じです。各公開キーは 1 行を占めます。ファイルが存在しない場合は、手動で作成できます。

ユーザーはファイルを手動で編集して公開キーを貼り付けることも、ローカル コンピューターで次のコマンドを実行することもできます。

$ cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

上の例では、user@hostをログインしたいユーザー名とホスト名に置き換える必要があります。

authorized_keys ファイルの権限は 644 に設定する必要があることに注意してください。つまり、ファイル所有者のみが書き込み可能です。権限が正しく設定されていない場合、SSH サーバーはファイルの読み取りを拒否する可能性があります。

$ chmod 644 ~/.ssh/authorized_keys

公開キーがサーバーにアップロードされている限り、OpenSSH は次回ログインするときにそのキーを自動的に使用し、パスワードの入力を求められなくなります。

$ ssh -l username shell.isp.com
Enter passphrase for key '/home/you/.ssh/id_dsa': ************
Last login: Mon Mar 24 02:17:27 2014 from ex.ample.com
shell.isp.com>

上の例では、SSH クライアントが秘密キーを使用する前に、ユーザーは秘密キーのロックを解除するためのパスワード (パスフレーズ) を入力するように求められます。

ssh-copy-id コマンド: 公開鍵を自動的にアップロードします

OpenSSH には、公開鍵をリモート サーバーの ~/.ssh/authorized_keys ファイルに自動的にコピーできる ssh-copy-id コマンドが付属しています。 ~/.ssh/authorized_keys ファイルが存在しない場合は、ssh-copy-id コマンドによってファイルが自動的に作成されます。

ユーザーは、ローカル コンピュータで次のコマンドを実行することで、ローカル公開キーをサーバーにコピーできます。

$ ssh-copy-id -i key_file user@host

上記のコマンドでは、-iパラメータを使用して公開キー ファイルを指定します。userはログインするアカウント名、hostはサーバー アドレスです。ユーザー名を省略した場合、デフォルトで現在のローカル ユーザー名が使用されます。このコマンドを実行すると、公開キーがサーバーにコピーされます。

公開キー ファイルはパスと .pub サフィックスを指定する必要がなく、ssh-copy-id~/.ssh ディレクトリで自動的に見つかることに注意してください。

$ ssh-copy-id -i id_rsa user@host

上記のコマンドでは、公開キー ファイルは自動的に ~/.ssh/id_rsa.pub と一致します。

ssh-copy-id はログインにパスワードを使用し、システムはリモート サーバーのパスワードの入力を求めるプロンプトを表示します。

ssh-copy-id は公開鍵を authorized_keys ファイルの末尾に直接追加することに注意してください。 authorized_keysファイルの末尾が改行文字でない場合、新しい公開鍵は前の公開鍵の末尾に追加され、2 つの公開鍵が連結されて無効になります。したがって、authorized_keys ファイルがすでに存在する場合は、ssh-copy-id コマンドを使用する前に、authorized_keys ファイルの末尾が改行文字であることを必ず確認してください (ファイルがすでに存在すると仮定して)。

ssh-agentコマンド、ssh-addコマンド

基本的な使い方

秘密鍵にパスワードを設定すると、使用するたびにパスワードを入力する必要があり、非常に面倒に感じることがあります。たとえば、scp コマンドを使用してリモートからファイルをコピーし続ける場合、毎回パスワードの入力が求められます。

ssh-agent コマンドは、この問題を解決するために設計されています。これにより、ユーザーは Bash セッション全体で初めて SSH コマンドを使用するときにのみパスワードを入力できるようになり、その後は秘密キーがメモリに保存されます。秘密キーのパスワードを入力する必要はもうありません。

最初のステップは、次のコマンドを使用して新しいコマンド ライン セッションを作成することです。

$ ssh-agent bash

上記のコマンドでは、使用しているコマンド ライン環境が Bash ではない場合、代わりに他のシェル コマンドを使用できます。 zshfish など。

現在のセッションで ssh-agent を有効にしたい場合は、次のコマンドを使用できます。

$ eval `ssh-agent`

上記のコマンドでは、ssh-agent が最初にバックグラウンドで自動的に実行され、次のように設定する必要がある環境変数が画面に出力されます。

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-barrett/ssh-22841-agent; export SSH_AUTH_SOCK;
SSH_AGENT_PID=22842; export SSH_AGENT_PID;
echo Agent pid 22842;

eval コマンドの機能は、上記の ssh-agent コマンドの出力を実行し、環境変数を設定することです。

2 番目のステップは、ssh-add コマンドを使用してデフォルトの秘密鍵 (~/.ssh/id_rsa~/.ssh/id_dsa、または ~/.ssh /id_ecdsa など) を追加することです。 、または ~/.ssh/id_ed25519)。

$ ssh-add
Enter passphrase for /home/you/.ssh/id_dsa: ********
Identity added: /home/you/.ssh/id_dsa (/home/you/.ssh/id_dsa)

上記の例では、秘密キーを追加するときに、パスワードの入力を求められます。秘密キーはメモリにロードされているため、今後この会話でキーを使用するときに、秘密キーのパスワードを入力する必要はありません。

デフォルトの秘密鍵以外のものを追加する場合、ssh-addコマンドで秘密鍵ファイルを明示的に指定する必要があります。

$ ssh-add my-other-key-file

上記のコマンドで、my-other-key-fileはユーザーが指定した秘密鍵ファイルです。

3 番目のステップは、ssh コマンドを使用してリモート サーバーに通常どおりログインすることです。

$ ssh remoteHost

上記のコマンドでは、remoteHostはリモート サーバーのアドレスであり、ssh はデフォルトの秘密キーを使用します。この時点で、秘密キーにパスワードがある場合、ssh はパスワードを要求せず、メモリから秘密キーを直接取得します。

別の秘密キーを使用してサーバーにログインする場合は、ssh コマンドの -i パラメータを使用して秘密キー ファイルを指定する必要があります。

$ ssh –i OpenSSHPrivateKey remoteHost

最後に、ssh-agentを終了する場合は、サブシェルを直接終了するか (Ctrl + d キーを押す)、次のコマンドを使用します。

$ ssh-agent -k

ssh-add コマンド

ssh-add コマンドは、ssh-agent に秘密鍵を追加するために使用されます。これには次のパラメータがあります。

(1)-d

-d パラメータは、指定された秘密キーをメモリから削除します。

$ ssh-add -d name-of-key-file

(2)-D

-D パラメータは、追加されたすべての秘密キーをメモリから削除します。

$ ssh-add -D

(3)-l

-l パラメータは、追加されたすべての秘密キーをリストします。

$ ssh-add -l

パスワードログインを閉じる

セキュリティ上の理由から、キー ログインを有効にした後は、サーバーのパスワード ログインをオフにすることをお勧めします。

OpenSSH の場合、具体的な方法は、サーバー sshd 設定ファイル /etc/ssh/sshd_config を開き、PasswordAuthentication 項目を no に設定することです。

PasswordAuthentication no

構成ファイルを変更した後は、必ず sshd を再起動してください。再起動しないと変更が有効になりません。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0