このガイドでは、SSHキーベースの認証とは何か、SSH認証方法の種類、そして最後にLinuxおよびUnixのようなオペレーティングシステムでSSHキーベースの認証を構成する方法について説明します。
SSHキーベースの認証とは何ですか?
ご存知のとおり、セキュアシェル 、まもなく SSH は、インターネットなどのセキュリティで保護されていないネットワークを介してリモートシステムと安全に通信/アクセスできるようにする暗号化ネットワークプロトコルです。
SSHを使用してセキュリティで保護されていないネットワーク経由でデータを送信する場合は常に、データはソースシステムで自動的に暗号化され、宛先側で復号化されます。
SSHには、パスワードベースの認証という4つの認証方法があります。 、キーベースの認証 、ホストベースの認証 、およびキーボード認証 。
最も一般的に使用される認証方法は、パスワードベースの認証とキーベースの認証です。
パスワードベースの認証では、必要なのはリモートシステムのユーザーのパスワードだけです。リモートユーザーのパスワードがわかっている場合は、 "ssh [email protected]"を使用してそれぞれのシステムにアクセスできます。 コマンド。
一方、キーベースの認証では、SSHを介して通信するために、SSHキーペアを生成し、SSH公開キーをリモートシステムにアップロードする必要があります。
各SSHキーのペアは、秘密キーと公開キーで構成されています。秘密鍵はクライアントシステム内に保持する必要があり、公開鍵はリモートシステムにアップロードする必要があります。 秘密鍵を誰にも開示してはなりません 。
SSHとその認証方法についての基本的な考え方を理解していただければ幸いです。次に、LinuxでSSHキーベースの認証を構成しましょう。
LinuxでSSHキーベースの認証を構成する
このガイドでは、Arch Linuxシステムをローカルシステムとして使用し、Ubuntu18.04LTSをリモートシステムとして使用します。
ローカルシステムの詳細:
- OS :ArchLinuxデスクトップ
- IPアドレス :192.168.225.37 / 24
リモートシステムの詳細:
- OS :Ubuntu18.04LTSサーバー
- IPアドレス :192.168.225.22 / 24
SSHキーペアを生成する
すでに述べたように、SSHキーベースの認証方法では、SSH経由でアクセスするリモートシステムに公開キーをアップロードする必要があります。
公開鍵は通常、 〜/.ssh/authorized_keysというファイルに保存されます。 リモートSSHシステムで。
重要な注意: ルートとしてキーペアを生成しないでください 、rootのみがこれらのキーを使用できるため。通常のユーザーとしてキーペアを作成します。
次に、ローカルシステムでSSHキーペアを作成しましょう。これを行うには、ローカルクライアントシステムで次のコマンドを実行します。
$ ssh-keygen
上記のコマンドは、2048ビットのRSAキーペアを作成します。パスフレーズを2回入力します。さらに重要なことに、パスフレーズを覚えておいてください。後で必要になります。
出力例:
Generating public/private rsa key pair. Enter file in which to save the key (/home/sk/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sk/.ssh/id_rsa. Your public key has been saved in /home/sk/.ssh/id_rsa.pub. The key fingerprint is: SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected] The key's randomart image is: +---[RSA 2048]----+ |+=+*= + | |o.o=.* = | |.oo * o + | |. = + . o | |. o + . S | | . E . | | + o | | +.*o+o | | .o*=OO+ | +----[SHA256]-----+
すでにキーペアを作成している場合は、次のメッセージが表示されます。 「y」と入力するだけで、既存のキーが上書きされます。
/home/username/.ssh/id_rsa already exists. Overwrite (y/n)?
注:
パスワードはオプションですことに注意してください 。パスワードを指定すると、SSHエージェントを使用してパスワードを保存していない限り、リモートシステムにSSHで接続しようとするたびにパスワードの入力を求められます。
パスフレーズが必要ない場合(ただし安全ではありません)、パスフレーズの入力を求められたら、Enterキーを2回押してください。ただし、パスフレーズを使用することをお勧めします。
パスワードなしのsshキーを使用することは、セキュリティの観点から一般的には良い考えではありません。これらは、ユーザーの介入なしにリモートシステムにアクセスする必要があるサービスなど、非常に特殊なケースに限定する必要があります(たとえば、rsync、unisonなどを使用したリモートバックアップ)。
プライベートファイルにパスフレーズのないsshキーがすでにある場合〜/ .ssh / id_rsa パスフレーズでキーを更新したい場合は、次のコマンドを使用します。
$ ssh-keygen -p -f ~/.ssh/id_rsa
出力例:
Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
SSH公開鍵をリモートシステムにコピー
ローカルシステムでキーペアを作成しました。次に、次のコマンドを使用して、SSH公開鍵をリモートSSHサーバーにコピーします。
$ ssh-copy-id [email protected]
ここでは、ローカル(Arch Linux)システムの公開鍵をリモートシステム(私の場合はUbuntu 18.04 LTS)にコピーします。
技術的に言えば、上記のコマンドはローカルシステムの〜/ .ssh/id_rsa.pubキーの内容をコピーします リモートシステムの〜/ .ssh / authorized_keysに ファイル。クリア?良い。
はいと入力します リモートSSHサーバーへの接続を続行してから、リモートシステムのsudo(またはrootユーザー)のパスワードを入力します。
/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 [email protected]'s password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '[email protected]'" and check to make sure that only the key(s) you wanted were added.
すでにキーをコピーしているが、新しいパスフレーズでキーを更新する場合は、 -fを使用します。 以下のように既存のキーを上書きするオプション。
$ ssh-copy-id -f [email protected]
ローカルシステムのSSH公開鍵をリモートシステムに正常に追加しました。
これで、リモートシステムでパスワードベースの認証を完全に無効にできます。なぜなら、すでにキーベースの認証を構成しているので、パスワードベースの認証はもう必要ありません。
リモートシステムでSSHパスワードベースの認証を無効にする
rootまたはsudoユーザーとして次のコマンドを実行する必要があります。
パスワードベースの認証を無効にするには、リモートシステムのコンソールに移動し、 / etc / ssh / sshd_configを編集します 任意のエディターを使用した構成ファイル:
$ sudo vi /etc/ssh/sshd_config
次の行を見つけます。コメントを外し、値をいいえに設定します 。
PasswordAuthentication no
sshサービスを再起動して、変更を有効にします。
$ sudo systemctl restart sshd
ローカルシステムからリモートシステムにアクセス
ローカルシステムに移動し、次のコマンドを使用してリモートサーバーにSSHで接続します:
$ ssh [email protected]
パスフレーズを入力して、リモートシステムにログインします。
出力例:
Enter passphrase for key '/home/sk/.ssh/id_rsa': Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37 [email protected]:~$
お気づきのとおり、 ssh-keygen を使用して以前に作成したパスフレーズを使用して、リモートシステムのアカウントにログインしました。 コマンド、ユーザーアカウントの実際のパスワードを使用しない。
別のクライアントシステムからsshを実行しようとすると、このエラーメッセージが表示されます。たとえば、次のコマンドを使用して、CentOSからUbuntuシステムにSSHで接続しようとしました。
$ ssh [email protected]
出力例:
The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established. ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts. Permission denied (publickey).
上記の出力にあるように、他のシステムからリモートのUbuntu18.04システムにSSHで接続することは許可されていません。
SSHサーバーへのクライアントシステムのキーの追加
これは非常に重要です。すでに述べたように、設定したもの(この場合はUbuntu)を除いて、SSH経由でリモートシステムにアクセスすることはできません。
リモートSSHサーバーにアクセスするためのアクセス許可をより多くのクライアントに付与したいと思います。私は何をすべきか?単純。すべてのクライアントシステムでSSHキーペアを生成し、SSH経由でアクセスするリモートサーバーにssh公開キーを手動でコピーする必要があります。
クライアントシステムでSSHキーペアを作成するには、次のコマンドを実行します。
$ ssh-keygen
パスフレーズを2回入力します。キーペアが生成されたら、公開sshキー(秘密キーではない)をリモートサーバーに手動でコピーします。
コマンドを使用してパブキーを表示します:
$ cat ~/.ssh/id_rsa.pub
以下のような出力が表示されます。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 [email protected]
コンテンツ全体を(USBドライブまたは任意のメディアを介して)コピーし、リモートサーバーのコンソールに移動します。 sshというディレクトリを作成します 以下に示すように、ホームディレクトリにあります。
$ mkdir -p ~/.ssh
次に、前の手順で生成したクライアントシステムの公開鍵を "〜/ .ssh / authorized_keys"というファイルに追加します。 :
echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys
リモートシステムでsshサービスを再起動します。これで、新しいクライアントからサーバーにSSHで接続できるようになります。
ssh pubkeyを手動で追加するのが難しいと思われる場合は、リモートシステムで一時的にパスワードベースの認証を有効にし、ローカルシステムから「ssh-copy-id」コマンドを使用してキーをコピーし、最後にパスワードベースの認証を無効にします。
関連記事:
- LinuxでSSHの多要素認証を設定する方法
- ユーザーがパスワードベースまたはキーベースのSSH認証を使用しているかどうかを確認する
- SSLH –HTTPSとSSHで同じポートを共有する
- ScanSSH –高速SSHサーバーとオープンプロキシスキャナー
結論
SSHキーベースの認証は、ブルートフォース攻撃からの追加のレイヤー保護を提供します。ご覧のとおり、キーベースの認証の構成もそれほど難しくありません。これは、Linuxサーバーを安全に保つために推奨される方法の1つです。