リモートでLinuxサーバー(またはコンテナ)で作業を行っている場合、それが固有に安全であると思い込むことがあるかもしれません。残念ながら、これは誤解です。セキュアシェルは、Telnetなどの古いソリューションよりも安全ですが、システムとデータのセキュリティを確保するために追加の手順を踏む必要があります。

デフォルトでは、セキュアシェルはユーザー名とパスワードに基づいて動作します。したがって、ssh [email protected]というコマンドを使用すると、”example.com”サーバー上の”ralph”ユーザーのパスワードが求められます。

しかし、サーバーブリーチのリスクが低いより良い方法があります。それがSSHキー認証と呼ばれるものです。

SSHキー認証は、ローカルコンピュータで生成されるキーペアに基づいて機能します。キーペアにはプライベートキーと公開キーが含まれます。プライベートキーはローカルコンピュータ上で安全に保持され、公開キーはリモートアクセスしたいサーバーに送信されます。キーが設定されると、サーバーにログインするたびに、キーが一致するかどうかが確認されます。キーが一致すれば、サーバーにアクセスできます。一致しない場合はアクセスできません。

この解決策は、従来のユーザー名とパスワード認証よりもはるかに安全であり、使用するべきです。

SSHキー認証の実装方法を紹介します。

必要なもの

実演を行うためには、少なくとも2つのLinuxマシン(ローカルとリモート)が必要です。すべてがコマンドラインで行われるため、グラフィカルな環境の設定は必要ありません。もちろん、リモートサーバーのIPアドレスまたはドメインが必要であり、ローカルマシンはリモートサーバーへのリモートアクセスが可能である必要があります。

SSHキーペアを生成する

まず、SSHキーペアを生成する必要があります。これはローカルコンピュータ上で行います。マシンにログインし、以下のコマンドを使用してキーペアを作成します。

ssh-keygen

キーを保存する場所を入力するように求められます(デフォルトの場所は~/.sshです)そして、キーペアのパスワードを入力および確認する必要があります。強力でユニークなパスワードを使用するようにしてください。

上記のコマンドにより、id_rsa(プライベートキー)とid_rsa.pub(公開キー)という2つのファイルが生成されます。

公開キーをリモートマシンにコピーする

次のステップは、公開キーをリモートマシンにコピーすることです。幸いにも、SSHにはこのタスクを容易にする組み込みの機能があります。キーをコピーするには、次のコマンドを実行するだけです。

ssh-copy-id USER@SERVER

USERはLinuxのユーザー名であり、SERVERはリモートサーバーのIPアドレスまたはドメインです。リモートユーザーのSSHパスワードが求められます。認証が成功したら、公開キーはリモートサーバーの~/.sshディレクトリに保存されます。

次に、以下のコマンドを使用して再びリモートマシンにログインしようとして、SSHキー認証をテストすることができます。

ssh USER@SERVER

USERはユーザー名であり、SERVERはリモートサーバーのIPアドレスまたはドメインです。今回はSSHキーのパスワード(ユーザーパスワードではなく)が求められます。

おめでとうございます、SSHキー認証が正常に機能しています!

しかし、セキュリティをさらに向上させることができます。

より安全なSSHサーバーの設定

この手順に進む前に、リモートサーバーへのアクセスが必要なすべてのクライアントマシンでキーペアを作成し、公開キーをサーバーにコピーしていることを確認してください。そうしないと、正しいユーザーアカウントでもこれらのマシンでログインすることができなくなります。この問題の回避策は、クライアントマシンのSSH公開キーの内容を手動でサーバーの~/.ssh/authorized_keysファイルにコピーすることです。

次のステップは、公開キー認証を有効にし、パスワード認証を無効にする(リモートサーバーで)ためにSSHデーモンの設定ファイルを開くことです。

次のコマンドを使用してSSHデーモンの設定ファイル(リモートサーバー上の)を開きます。

sudo nano /etc/ssh/sshd_config

まず、次の行を見つけます。

# PubkeyAuthentication yes

この行を次のように変更します。

PubkeyAuthentication yes

次に、次の行を見つけます。

# PasswordAuthentication yes

この行を次のように変更します。

PasswordAuthentication no

ファイルを保存して閉じます。

次に、次のコマンドを使用してSSHを再起動します。

sudo systemctl restart sshd

現在の接続を終了する前に、(公開キーをサーバーにコピーしたマシンで)新しいターミナルウィンドウを開き、SSHに再度ログインしようとしてください。アクセスが許可されれば、SSHを介してログインする唯一の方法がキー認証であることが証明されます。

今後、キーペアが一致しない場合は、Linuxサーバーにログインする試みが拒否されます。

FAQ

1. サーバーのセキュリティを提供するのはどのソリューションですか?
SSHキー認証ソリューションです。

2. SSHキー認証はどのように機能しますか?
SSHキー認証は、プライベートキーと公開キーのキーペアに基づいています。プライベートキーはローカルコンピュータに残り、公開キーはアクセスしたいサーバーに送信されます。ログイン時にキーが一致するかどうかが認証されます。

3. SSHキー認証はなぜ従来のユーザー名とパスワード認証よりも安全ですか?
SSHキー認証は、ログイン時にパスワードの入力を必要としないため、より安全です。プライベートキーはローカルコンピュータに残るため、不正な個人が傍受するのが困難です。

4. SSHキーペアはどのように生成しますか?
「ssh-keygen」というコマンドを使用して、ローカルコンピュータ上でSSHキーペアを生成できます。

5. 公開キーをリモートマシンにコピーする方法はありますか?
「ssh-copy-id USER@SERVER」というコマンドを使用して、公開キーをリモートマシンにコピーできます。

6. SSHサーバーのセキュリティを向上するにはどうすればよいですか?
SSHサーバーのセキュリティを向上するには、SSHデーモンの設定ファイルで公開キー認証を有効にし、パスワード認証を無効にする必要があります。

7. 設定の変更後にSSHを再起動する方法はありますか?
「sudo systemctl restart sshd」というコマンドを使用して、SSHを再起動できます。

用語の定義

セキュアシェル(SSH)- ネットワーク接続のための安全な通信プロトコルです。リモートサーバーへのログインによく使用されます。

プライベートキー- ローカルコンピュータに残る秘密の暗号鍵です。暗号化されたデータを復号化するために使用されます。

パブリックキー- アクセスしたいサーバーに送信される暗号鍵です。SSHキー認証で使用されます。

認証- ユーザーやシステムの正体を確認するプロセスです。

コンソール-

The source of the article is from the blog coletivometranca.com.br