GNU/Linux >> Linux の 問題 >  >> Linux

Linux / UNIX でのパスワードレス SSH の仕組み

SSH は、異なるマシン間でデータを安全に転送するためのプロトコルです。 SSH プロトコルは公開鍵暗号化を使用して、クライアントがサーバーを認証できるようにし、必要に応じてパスワードをやり取りすることなくサーバーがクライアントを認証できるようにします。

公開鍵暗号化では、公開鍵と秘密鍵のペアが使用されます。秘密鍵は秘密にされ、ネットワーク経由で転送されることはありません。公開鍵はすべてのピアに配布できます。公開鍵を使用して暗号化されたメッセージは、秘密鍵でのみ復号化できます。

SSH 接続時に、クライアントはサーバーの公開鍵を受け取り、これが $HOME/.ssh/known_hosts に保存されている公開鍵と一致するかどうかを確認します .このテストが成功し、サーバーがクライアントの公開鍵を持っていない場合は、パスワードが必要です。それ以外の場合、サーバーはクライアントの公開鍵で暗号化されたメッセージを送信し、クライアントが秘密鍵を使用してメッセージを正常に復号化できた場合、接続が確立されます。

SSH プロトコルには、バージョン 1 と 2 の 2 つのバージョンがあります。暗号化はプロトコル バージョンに関連付けられています。バージョン 1 にはセキュリティ上の脆弱性があります。可能な限り、バージョン 2 を使用する必要があります。ほとんどの SSH サーバーは、バージョン 1 の制限により、プロトコルのバージョン 2 を使用します。

公開鍵と秘密鍵のペアの暗号化には、RSA の 2 つのアルゴリズムがあります。 とDSA .

クライアントのセットアップ

プロトコル タイプ コマンドライン
バージョン 1 RSA1 -t rsa1
バージョン 2 RSA -t rsa
バージョン 2 DSA -t dsa

必要な ID タイプを決定した後、最初のステップは公開秘密鍵のペアを生成し、公開部分をサーバー側の適切な場所にコピーすることです。クライアント マシンのユーザーのホーム ディレクトリで、次のコマンドを実行します (作成しない場合は、ディレクトリ $HOME/.ssh が必要です)。

# ssh-keygen -t dsa -f ~/.ssh/id_dsa 
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:Qmd9iBOzx02n4DvDiBwRoGbGGC12X9i41QtbBxznHZc root@geeklab
The key's randomart image is:
+---[DSA 1024]----+
|..  ..*.=o+......|
|.=.o o * %o*.ooE |
|o.B . * X O.+.   |
| +   = * * o     |
|      + S =      |
|       .   o     |
|                 |
|                 |
|                 |
+----[SHA256]-----+

ここで、
-t – は暗号化のタイプに使用されます。
-f – 公開鍵と秘密鍵のペアを保管する場所。この場合、ユーザー ホームの .ssh ディレクトリです。

上記のコマンドを実行すると、パスフレーズが求められます。接続のたびにこのパスフレーズを入力したくない場合は、この部分を空白のままにして [Enter] を押します。または、パスフレーズを処理する ssh-agent を設定することもできます。

上記のコマンドは ~/.ssh に 2 つのファイルを作成します:

# ls -lrt ~/.ssh/id_dsa*
-rw-r--r--. 1 root root 602 Apr 12 14:45 /root/.ssh/id_dsa.pub
-rw-------. 1 root root 668 Apr 12 14:45 /root/.ssh/id_dsa

サーバーのセットアップ

ファイル id_dsa.pub には、ファイル $HOME/.ssh/authorized_keys に追加する必要があるクライアント公開鍵が含まれています サーバー上:

1. id_dsa.pub ファイルをサーバーにコピーします:

client$ scp ~/.ssh/id_dsa.pub user@server:~/.ssh/id_dsa.pub

もちろん、今回はユーザーのパスワードを入力する必要があります。

2. サーバー マシンにログオンし、サーバー側の .ssh ディレクトリに移動します

client$ ssh user@server
server$ cd .ssh

3. ここで、クライアントの公開鍵をサーバー上の既知の公開鍵リストに追加します。

server$ cat id_dsa.pub >> authorized_keys
server$ chmod 640 authorized_keys
server$ rm id_dsa.pub
server$ exit

以上です。

テスト

パスワードなしの ssh が機能するかどうかをテストするには、次の構文を使用します:

$ ssh -l [user] [server]
Last login: Tue Apr 12 15:20:07 2007 from 192.168.0.100

または代わりに

$ ssh [user]@[server]
Last login: Tue Oct 12 15:20:07 2007 from 192.168.0.100

システムがパスワードを問い合わせなかった場合、すべてが正常に機能しています。

警告

秘密鍵 (~/.ssh/id_dsa) を秘密にしておいてください!あなたの公開鍵 (~/.ssh/id_dsa.pub) を世界に渡しても安全ですが、他の人があなたの秘密鍵 (~/.ssh/id_dsa) を読み取れないように細心の注意を払う必要があります。秘密鍵にアクセスできる人は誰でも、一致する公開鍵がインストールされている任意のマシンにログインできます。


Linux
  1. LinuxでSSHポートを変更する方法

  2. UNIX / Linux で SSH を使用して Rsync をセットアップする方法 (パスワードなしの rsync)

  3. Linux でパスワードなしの SSH ログインをセットアップする方法

  1. LinuxでSSHキーベースの認証を構成する方法

  2. SSHキーを設定する方法

  3. ssh-keygen コマンドを使用してパスワードなしの ssh を構成する方法

  1. パスワードなしのSSHログインを設定する方法

  2. Windows10でSSHキーを生成する方法

  3. Linux で「パスワードなし」の ssh ログイン用に SSH キーをセットアップする方法