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 ではない場合、代わりに他のシェル コマンドを使用できます。 zsh
や fish
など。
現在のセッションで 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