SSH(Secure Shell)は、検証済みのプライベート接続を作成し、暗号化キーを使用してチャネルを保護し、別のマシンでリモートシェルを起動できるようにするプロトコルです。この接続を使用すると、リモートコマンドの実行、安全なファイル転送の開始、ソケットとディスプレイおよびサービスの転送などを行うことができます。
SSHが登場する前は、ほとんどのリモート管理はtelnetを介して行われていました。公平を期すために、リモートセッションを確立できれば、実質的に必要なことは何でも実行できます。このプロトコルの問題は、トラフィックが暗号化されずに純粋な平文として移動することでした。トラフィックスニファを使用して、ユーザー名とパスワードを含むパケットを含む、セッション内のすべてのパケットを確認するのにそれほど労力はかかりませんでした。
SSHでは、非対称鍵を使用することにより、通信に関与する装置間のセッションが暗号化されます。そして今日では、これはこれまで以上に関連性が高く、すべてのクラウドサーバーが世界中から管理されています。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
SSH構成に関する3つのヒント
SSHプロトコルの最も一般的な実装はOpenSSHであり、OpenBSDプロジェクトによって開発され、ほとんどのLinuxおよびUnixライクなオペレーティングシステムで利用できます。このパッケージをインストールすると、sshd_config
という名前のファイルが作成されます。 これは、サービスの動作のほとんどを制御します。デフォルト設定は一般的に非常に保守的ですが、SSHエクスペリエンスを最適化し、サーバーを不正アクセスから保護するために、いくつかの調整を行う傾向があります。
1。デフォルトのポートを変更します
これは、すべての管理者が覚えているわけではありません。ポートスキャナーを持っている人なら誰でもSSHポートを移動した後でも発見できるので、危害を加えることはほとんどありませんが、サーバーに対して何百もの洗練されていないスクリプトが起動されるのを防ぐのに便利です。ログからかなりの量のノイズをカットするために自分でできることは好意です。
この記事では、1つのクラウドプロバイダー上にSSHサーバーのデフォルトポートTCP 22があり、1分あたりの平均攻撃数は24でした。ポートをはるかに高い数のTCP 45678に変更した後、ユーザー名を接続して推測する人の平均またはパスワードは1日2つでした。
SSHのデフォルトのポートを変更するには、/etc/ssh/sshd_config
を開きます。 お気に入りのテキストエディタで、Port
の値を変更します 22から1024より大きい数値まで。22がデフォルトであるため(構成で明示的に宣言する必要がないため)、行にコメントが付けられる場合があります。そのため、保存する前に行のコメントを解除してください。
#Port 22122
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
ポートを変更してファイルを保存したら、SSHサーバーを再起動します。
$ sudo systemctl restart sshd
2。これ以上のパスワードはありません
認証の手段としてのパスワードの使用をやめるという一般的な動きがあり、2要素認証などの方法が人気を集めています。 OpenSSHは非対称キーを使用して認証できるため、複雑なパスワードを覚えておく必要はなく、数か月ごとにパスワードをローテーションしたり、リモートセッションの確立中に誰かが「ショルダーサーフィン」したりすることを恐れる必要はありません。 SSHキーを使用すると、リモート機器にすばやく安全にログインできます。これは多くの場合、サーバー自体の誤ったユーザー名とパスワードの処理にかかる時間が短縮されることを意味します。ログインはとても簡単です。キーがない場合、エントリはなく、プロンプトもありません。
この機能を使用するには、クライアント(物理的に目の前にあるコンピューター)とサーバー(リモートマシン)の両方を構成する必要があります。
クライアントマシンで、SSHキーペアを生成する必要があります。これは、公開鍵と秘密鍵で構成されています。それらの名前が示すように、1つのキーは、ログインするサーバーに配布するためのものであり、もう1つのキーはプライベートであり、誰とも共有する必要はありません。 ssh-keygen
を使用して新しいキーを作成します コマンドを実行し、-t
を使用します ed25519
のような優れた最近の暗号化ライブラリを指定するオプション :
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519):
キーの作成中に、ファイルに名前を付けるように求められます。 戻るを押すことができます デフォルトを受け入れます。将来、さらに多くのキーを作成する場合は、それぞれにカスタム名を付けることができますが、複数のキーを持つことは、各インタラクションに使用するキーを指定することを意味するため、今のところ、デフォルトを受け入れるだけです。
キーにパスフレーズを与えることもできます。これにより、他の誰かがあなたの秘密鍵を取得できたとしても(それ自体は決して起こらないはずです)、あなたのパスフレーズなしでそれを使用することはできません。これは、一部のキーには便利な保護手段ですが、他のキー(特にスクリプトで使用されるキー)には適切ではありません。 戻るを押します キーをパスフレーズなしで残すか、必要に応じてパスフレーズを作成します。
キーをサーバーにコピーするには、ssh-copy-id
を使用します 指図。たとえば、example.com
という名前のサーバーを所有している場合 、次に、次のコマンドを使用して公開鍵をコピーできます:
$ ssh-copy-id [email protected]
これにより、ファイルauthorized_keys
が作成または修正されます サーバーの.ssh
にあります 公開鍵を使用したディレクトリ。
ssh-copy-id
コマンドは実行内容を確認しました。コンピューターからログインして、パスワードなしで(または、パスワードを使用する場合はキーのパスフレーズを使用して)ログインできることを確認してください。
サーバーアカウントのパスワードを使用せずにサーバーにアクセスしたら、サーバーのsshd_config
を編集します。 PasswordAuthentication
を設定します no
。
PasswordAuthentication no
ssh
を再起動します 新しい構成をロードするサービス:
$ sudo systemctl restart sshd
3。ログインできるユーザーを決定する
ほとんどのディストリビューションでは、rootユーザーがSSH経由でログインすることを許可していません。これにより、sudo
を使用して、非特権アカウントのみがアクティブになります。 必要に応じて特権を昇格させるコマンド。これにより、1つの注目に値する、痛々しいほど明白なターゲット(root)が、単純でありながら一般的すぎるスクリプト攻撃から保護されます。
同様に、OpenSSHのシンプルで強力な機能は、マシンにログインできるユーザーを決定する機能です。 SSHアクセスを許可するユーザーを設定するには、sshd_config
を開きます お気に入りのテキストエディタでファイルを作成し、次のような行を追加します:
AllowUsers jgarrido jane tux
SSHサービスを再起動して、新しい構成オプションをロードします。
これにより、3人のユーザー(jgarrido、jane、およびtux)のみがログインしたり、リモートマシンで任意の操作を実行したりできます。
最終的な考え
OpenSSHを使用して、強力で堅牢なSSHサーバーを実装できます。これらは、インストールを強化するための3つの便利なオプションにすぎませんでした。それでも、sshd_config
内でオンまたはオフにできる機能とオプションはたくさんあります。 ファイルに加えて、SSHサービスをさらに保護するために使用できるFail2banなどの優れたアプリケーションが多数あります。