SSH (Secure Shell)は、 TCP を使用して、リモートクライアントとサーバー間の安全な接続を確立するために使用される暗号化ネットワークプロトコルです。 セキュリティと信頼性のためのプロトコル。
SSHベースの接続は、さまざまな認証方法をサポートしています。そのうちのいくつかは:
- パスワードベースの認証
- キーベースの認証
デフォルトでは、2台のマシン間に新しいSSH接続を作成すると、パスワードベースの認証が使用されます。ただし、同じクライアントから頻繁にサーバーにログオンしている場合は、サーバーにログインするたびにパスワードを入力するのが面倒でイライラする可能性があります。
このチュートリアルでは、公開鍵を使用してリモートサーバーにログオンするためのその他の代替認証について説明します。 。
頻繁に使用する特定のクライアントマシンとサーバーマシンでこれを設定して、このマシンから安全に自動的にログインできるようにする方法を見てみましょう。
クライアントマシン上の既存のSSHキーを確認します
最初の部分では、クライアントで秘密鍵と公開鍵のペアを生成します。 機械。公開鍵は後でサーバーにコピーされ、認証に使用されます。
SSHキーを設定する前に、このクライアントサーバーの組み合わせに既存のキーが存在しないことを確認しましょう。
このbashスクリプトを実行して、ファイルが存在するかどうかを確認しましょう(または、ターミナルで直接入力することもできます)
if test -f ~/.ssh/id_*.pub; then echo "Found" else echo "Not Found" fi
「見つかりません」と表示された場合は、そのようなファイルが存在しないことを意味し、この接続用の新しいキーを作成する準備ができています。
それ以外の場合は、既存のキーを直接使用して、次の手順をスキップできます。ただし、古いキーを使用したくない場合は、次の手順に従って、古いキーを削除して新しいキーを生成できます。
クライアント/サーバーマシン用の新しいSSHキーペアを生成します
以下のコマンドは、新しい 4096を生成します コメントとしてあなたのID(識別可能なものなら何でも構いません!)とのビットSSHキーペア:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
このコマンドを実行してキーの場所とパスフレーズを構成すると、キーのフィンガープリントとともに新しいキーが生成されます。
それでは、ls
を使用して、秘密公開鍵が実際に存在するかどうかを確認しましょう。 。
ls ~/.ssh/id_*
以下の出力が表示されます :
/root/.ssh/id_rsa /root/.ssh/id_rsa.pub
これは、id_rsa
は秘密鍵であり、id_rsa.pub
はあなたの公開鍵です。
注 :決して 秘密鍵をマシン間で共有します。これが公開鍵を持っている理由です。したがって、同じ公開鍵を複数のサーバーにコピーしてssh
に送ることができます ローカルマシンの秘密鍵を使用して追加のセキュリティを維持しながら、に。
公開鍵をサーバーにコピーします
クライアントにSSHキーのペアがあるため、リモートサーバーにログインできるようにするには、そこに公開キーをコピーする必要があります。
scp
を使用できます ファイルをサーバーにコピーしますが、ssh
のより良い代替手段があります キー、ssh-copy-id
を使用 。
ssh-copy-id
をインストールできます 利用できない場合はパッケージマネージャーを使用します。
ssh-copy-id server_username@server_ip
サーバーのユーザー名パスワードを入力すると、公開鍵を使用してサーバーにログインすることが認証されます。
出力は次のようになります:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/client_user/.ssh/id_rsa.pub" /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 SERVER_USER@SERVER_IP's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'SERVER_USER@SERVER_IP'" and check to make sure that only the key(s) you wanted were added.
これは、ssh
を使用できることを意味します 追加のキーベースの認証を使用して、クライアントからこの特定のマシンに送信します!
テストするには、ssh
を試してください 今すぐサーバーに接続します!
ssh server_user@server_ip
潜在的な問題のデバッグ
ただし、キーベースのパスフレーズとともにパスワードプロンプトが表示される場合があります。何が起こっているのですか?
考えられる理由については、こちらで詳しく説明しています。 ~/.ssh
に対する適切な権限がないようです リモートサーバーのディレクトリ 。 HOMEの内容 ディレクトリ~
、~/.ssh
ディレクトリ、および~/.ssh/authorized_keys
ファイルは私たちだけが書き込み可能でなければなりません。それ以外の場合は、他のユーザーがアクセスできることを検知するため、パスワードも要求されます。
まず、ホームディレクトリの権限を確認しましょう。
書き込むことしかできないため、このディレクトリの権限を変更する必要はありません。同様に、モードを確認し、chmod
を使用してモードを変更します 。
chmod -R ~/.ssh 700
を使用して、これらのファイルとディレクトリへのアクセス許可を変更しましょう 再帰的に。
次に、これが機能するかどうかをテストします。
潜在的な問題のデバッグ–パート2
それでも機能しない場合は、このスレッドで、ssh構成ファイルの一部のオプションが無効になっている可能性があると記載されています。
/etc/ssh/sshd_config
を確認してください サーバーで RSAAuthentication
を確認する 、PubkeyAuthentication
およびUsePAM
オプションは無効になっていません。
また、PasswordAuthentication no
を明示的に設定していることを確認してください 構成で、ユーザーのパスワードベースの認証を無効にします。
ご覧のとおり、これは確かに私に当てはまりました。 PubKeyAuthentication
も無効になっていたため、セッションでパスワードのプライマリモードとして使用されなかったため、パスワードの入力を求められました。
この行のコメントを外し、ssh
を再起動しました 変更を適用します。
sudo systemctl restart ssh
これで、パスワードなしの認証がようやく機能するようになりました。うまくいけば、あなたもこの時までに解決策を見つけたでしょう。
最終的にsshを構成しました パスワードなしで動作します!
結論
このチュートリアルでは、ssh
を設定する方法を説明しました。 公開鍵ベースの認証方法で、パスワードなしでサーバーにログインします!