LinuxでパスワードなしのSSHログインを有効にする方法

パスワードなしのSSH Linux 00 特集画像

SSHサーバーにパスワードなしでサインインするのは素晴らしいアイデアです。真剣に、パスワードを取り除きましょう。Linuxサーバーで最も攻撃されるサービスの1つでパスワードを使用する必要はありませんよね?標準のパスワードベースの認証を使用してSSHサーバーを保護するのは悪いアイデアです。攻撃者は簡単にパスワードをブルートフォース攻撃でき、悪意のある行為者とあなたのサーバーの間にそれが唯一の障壁である場合、あなたは確実に不安になるべきです。

目次

  • パッケージのインストール
  • LinuxでSSHキーを生成する
  • リモートLinuxホストにキーを送信する
  • LinuxでSSH接続をテストする
  • パスワードをブロックするようにSSHを設定する
  • よくある質問

だからこそ、RSAキーに基づく認証ははるかに優れています。あなたは、すでに受け入れられたRSAキーを持つコンピュータからのみアクセスを許可するようにLinuxサーバーを構成し、保護することができます。他の誰も即座に拒否されます。追加の利点として、パスワードありまたはなしでこれらのキーを作成することができ、これは完全にあなた次第です。パスワードなしの強力なキーはほとんどの場合問題ありません。

自宅でLinuxデバイスを使用している場合、便利さの追加の利点があります。LinuxワークステーションからラップトップにSSH Xフォワーディングを設定したいとしましょう。リモートプログラムを実行するたびに本当にパスワードを入力したいですか?SSHキーを設定すれば、必要ありません。

パッケージのインストール

必要なパッケージがいくつかあります。おそらくすでにいくつかは持っているでしょうが、確認するのは良いアイデアです。パッケージはサーバーとクライアントの両方で同じです。ただし、両方のマシンが互いにサーバーおよびクライアントである可能性も高い(家庭の状況)ため、これらのパッケージがインストールされていることを確認したいかもしれません。

OpenSSHメタパッケージは、DebianまたはUbuntuシステムにデフォルトでインストールされていません。まだインストールされていない場合は、次のコマンドを実行してインストールできます:

sudo apt install ssh

パスワードなしのSSH Linux 02 OpenSSHのインストール

LinuxでSSHキーを生成する

LinuxでSSHキーを生成するのは本当に簡単です。OpenSSHにキーを生成する必要があることを伝えます。また、-bフラグでビット数を指定し、-tでタイプを指定するのも良いアイデアです。4096ビットのキーが最適で、より強力な暗号化を提供します。

ssh-keygen -t ed25519

最初に、ユーティリティはキーを保存する場所を尋ねます。デフォルトのディレクトリのためにEnterを押すだけです。パスワードを尋ねられたら、パスワードなしのキーとパスワードなしの認証のために空白のままにします。キーにパスワードを使用したい場合は、ここに入力します。

コンピュータはキーを生成するのに数秒かかります。終了すると、ターミナルにキーのASCIIアート表現が表示されます。

リモートLinuxホストにキーを送信する

キーを使用するには、リモートサーバーに送信する必要があります。OpenSSHにはそれ用の別の組み込みユーティリティもあります。キーの場所とサーバー上のどのユーザーに関連付けるかを指定します。

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@ip_remote_host

ip_remote_hostをリモートホストの実際のIPアドレスに置き換え、SSHで管理することになります。usernameをリモートホストの実際のユーザー名に置き換えます。

パスワードなしのSSH Linux 04 SSHコピーID

-iオプションを使用して公開鍵を含むアイデンティティファイルを指定することが重要です。このオプションなしでSSHキーを使用しようとすると、エラーが発生する可能性があります。

LinuxでSSH接続をテストする

リモートサーバーにSSHキーがあるので、接続が正しく機能するかどうかをテストできます。

次のコマンドでログインします:

ssh username@ip_remote_host

リモートホストは、ユーザーアカウントのパスワードを尋ねることなくログインさせます。

パスワードなしのSSH Linux 06 パスワードなしログイン

ただし、プロセス中に間違いを犯した場合、SSHデーモンは自動的にユーザーアカウントのパスワード認証にフォールバックします。これにより、機能しないRSAキーがあってもリモートサーバーにアクセスできます。

パスワードなしのSSH Linux 07 失敗したログイン

パスワードをブロックするようにSSHを設定する

最高のセキュリティのために、LinuxサーバーでSSHパスワードログインを無効にする必要があります。SSHで二要素認証を有効にするのと同様に、これにより誰もサーバーにブルートフォース攻撃することができなくなります。

パスワードなしのSSH Linux 08 二要素サンプル

これを行う前に、SSHキーで確実にログインできることを確認することが重要です。機能しないキーがあると、リモートサーバーからロックアウトされる可能性があります。

SSHデーモンの設定ファイルは「/etc/ssh/sshd_config」にあります。サーバー上でsudoと好みのテキストエディタを使用してファイルを開きます。たとえば、次のコマンドを実行してnanoを使用してこのファイルを開きます:

sudo nano /etc/ssh/sshd_config

Ctrl + Wを押して以下の行を見つけ、例のように編集します。両方のエントリのコメントを外し、値をnoに変更します。

PasswordAuthentication no  
PermitEmptyPasswords no

パスワードなしのSSH Linux 09 オプションを見つけるナノ

PasswordAuthenticationは、パスワード認証を使用するかどうかを指定します。SSHキーのみを使用したいので、これを「no」に設定します。

PermitEmptyPasswordsは、サーバーが空のパスワードでのログインを許可するかどうかを指定します。これを許可するべきではないので、これを「no」に設定します。

次に、「UsePAM」行を見つけて「no」に変更します。これにより、デーモンはSSHキー以外の認証方法(パスワード、Kerberosなど)を使用しなくなります。

UsePAM no

パスワードなしのSSH Linux 11 PAMサポートを無効にする

Ctrl + Oを押してファイルを保存し、次にCtrl + Xを押してSSHサーバーを再読み込みします。

sudo systemctl restart ssh

SSHキーのみを認証に使用するようにサーバーを正常に構成したので、有効なRSAキーなしでログインしようとする誰もが即座に拒否されます。

パスワードなしのSSH Linux 12 キーなしログイン

よくある質問

SSHキーをLinuxサーバーに送信すると「接続が拒否されました」と表示されます。どうすれば修正できますか?

リモートホストでSSHサーバーが実行されていることを確認してください。次のコマンドを実行して確認できます:sudo systemctl status ssh。サービスが実行されていない場合は、次のコマンドで開始できます:sudo systemctl start ssh

サーバーでファイアウォールが実行されている場合は、ポート22が開いていることを確認してください。次のコマンドを実行して確認できます:sudo ufw status。SSHがリストにない場合は、次のコマンドを実行して有効にできます:sudo ufw allow ssh

ログインしようとすると「Permission denied (publickey)」エラーが表示されます。どうすればよいですか?

このエラーは、サーバーが認証にキーを使用するように構成されているが、まだパスワードでログインしようとしていることを意味します。これは、RSAキーが欠落しているか、SSH設定が不正確である可能性があります。公開鍵をサーバーに正しくコピーしたことを確認し、接続時に正しい公開鍵を指定していることを確認してください。

接続しようとすると「ホストキーの検証に失敗しました」エラーが表示されます。どうすれば修正できますか?

このエラーは、SSHサーバーのホストキーが変更されたことを意味します。サーバーが再インストールされた場合に発生する可能性があります。新しい公開鍵を再生成し、リモートホストにコピーできます。この記事の手順を繰り返して新しいキーを再生成し、サーバーに追加してください。

同じリモートLinuxサーバーで複数のSSHキーを使用することは可能ですか?

はい。OpenSSHで-fオプションを使用して、リモートサーバーに接続するために使用したい正確なキーを指定できます。たとえば、ssh -f ~/.ssh/id_rsa_2 username@remote_ip_addressを実行すると、デフォルトの「id_rsa」キーの代わりに「id_rsa_2」キーを使用してリモートサーバーに接続します。

ただし、このコマンドは、リモートサーバーがすでに新しいキーを認識している場合にのみ機能することに注意してください。最初にssh-copy-idを使用してリモートサーバーにコピーする必要があります。上記の手順と同様に、パスワードまたはRSAキー認証を介してこれを行うことができます。

SSHキーをサーバーにコピーしようとすると「Permission Denied」エラーが表示されます。

この問題は、リモートサーバーの権限の問題が原因である可能性が高いです。ほとんどの場合、ssh-copy-idユーティリティは、リモートサーバーに接続するとすぐにアクセスの問題を適切に解決するはずです。ただし、この機能が壊れて、ローカルマシンの「id_rsa」を適切にコピーできない場合があります。

これを修正するには、リモートサーバーにログインし、chmod 700 /home/$USER/.ssh/* && chmod 600 /home/$USER/.sshを実行します。これにより、「.ssh」フォルダーとその内容の正しい権限ビットが設定されます。

画像クレジット:Unsplash。すべての変更とスクリーンショットはRamces Redによるものです。