SSH は、チャネルを保護するために暗号化された鍵で認証されたプライベート接続を作成し、別のマシン上でリモートシェルを起動することができるプロトコルです。この接続を使用すると、リモートコマンドを実行したり、安全なファイル転送を開始したり、ソケット、ディスプレイ、サービスなどを転送したりすることができます。
SSHの出現により、ほとんどのリモート管理はtelnetで行われるようになりました。このプロトコルの問題は、通信が暗号化されずに平文で行われることです。 使えば、ユーザー名やパスワードを含むセッションのすべてのパケットを見るのに、それほど手間はかかりません。
SSHでは、非対称鍵の使用により、通信に関わるデバイス間のセッションが暗号化されます。今日、クラウドサーバーは世界中に分散して管理されているため、これはこれまで以上に理にかなっています。
SSH 設定のヒント
デフォルトポートの変更
これは、すべての管理者が覚えているわけではない問題です。ポートスキャナを持っている人なら誰でもSSHポートを見つけることができ、たとえその後に別のポートに移したとしても、ですから自分自身を危険から取り除くのは難しいのですが、これによってサーバースキャンをターゲットにした何百もの素朴なスクリプトを効果的に避けることができます。これは、多くの心痛を救い、ログから多くのノイズを取り除く操作です。
この記事を書いている時点では、あるクラウドサービスプロバイダーにSSHサーバーを設置していたのですが、デフォルトのポートがTCP 22で、1分あたり平均24回攻撃されていました。ポートをより高い番号のTCP 45678に変更した後は、1日平均2回の接続があり、さまざまなユーザー名やパスワードで推測されていました。
SSHのデフォルト・ポートを変更するには、お好みのテキストエディタで /etc/ssh/sshd_config開き、Portの値を22から1024以上の数値に変更してください。22がデフォルトなので、この行はコメントアウトされているかもしれません。
Port 12222#AddressFamily any#ListenAddress 0.0.0.0#ListenAddress ::
ポートを変更してファイルを保存したら、SSHサーバーを再起動します:
$ sudo systemctl restart sshd
パスワードは使用しないでください。
認証の手段としてパスワードを使わない傾向が一般的になってきており、 二要素認証 (two-factor authentication) のような方法がますます普及してきています。 OpenSSH は認証に非対称鍵を使うことができます。 そのため、複雑なパスワードを覚える必要がなく、数ヶ月ごとに パスワードを入れ替える必要もなく、リモートセッションの設定中に誰かが あなたの肩越しに覗き見しているのを心配する必要もありません!リモートセッションをセットアップするときに、誰かに「肩越しに覗かれる」心配はありません。SSHキーを使えば、リモートデバイスに素早く安全にログインできます。これにより、間違ったユーザー名やパスワードに費やす時間を減らすことができます。ログインはとても簡単です。鍵がない場合は、入力はなく、プロンプトさえも表示されません。
この機能を使用するには、クライアントとサーバーの両方を設定する必要があります。
クライアント・マシン上で、SSH鍵ペアを生成する必要があります。これは公開鍵と秘密鍵で構成されます。その名前が示すように、一方の公開鍵はログインしたいサーバに配布するためのもので、もう一方は誰とも共有してはならない秘密鍵です。ssh-keygen コマンドを使って新しい鍵ペアを作成し、-t オプションで ed55219 のような最新の暗号ライブラリを指定します:
$ ssh-keygen -t ed25519Generating public/private ed25519 key pair.Enter file in which to save the key (~/.ssh/id_ed25519):
鍵の作成プロセス中に、ファイル名を指定するプロンプトが表示されます。Enterを押してデフォルトを受け入れることができます。将来的にさらにキーを作成する場合は、それぞれのキーにカスタム名を付けることができますが、複数のキーを持つということは、それぞれのインタラクションに使用するキーを指定しなければならないということですので、今はデフォルトを受け入れてください。
鍵にパスフレーズを付けることもできます。こうすることで、たとえ他人が秘密鍵を手に入れたとしても、 パスフレーズがなければその鍵を使うことはできなくなります。これは、鍵によっては有効な保護手段ですが、そうでないものもあります。Enterを押してパスフレーズなしの鍵にするか、パスフレーズを作成するかを選択します。
$ ssh-copy-id jgarrido@example.com
これにより、サーバの .ssh ディレクトリに公開鍵を含む authorized_keys ファイルが作成または変更されます。
ssh-copy-id コマンドが意図したとおりに実行されたことを確認したら、コンピュータからログインしてみて、パスワードなしでログインできることを確認します。
サーバーアカウントのパスワードを使わずにサーバーにログオンした後、サーバーのsshd_configを編集し、 PasswordAuthentication noに設定します。
PasswordAuthentication no
SSHサービスを再起動して、新しい設定をロードします:
$ sudo systemctl restart sshd
誰がログインできるかの決定は
ほとんどのディストリビューションでは、rootユーザがSSH経由でログインすることを許可していません。これは、必要に応じてsudoコマンドを使って特権を昇格させ、非特権アカウントのみがアクティブであることを保証します。これにより、単純で一般的なスクリプティング攻撃から、明白で手痛い標的となることを防いでいます。
繰り返しますが、OpenSSH のシンプルで強力な機能は、どのユーザがマシンに ログインできるかを設定できることです。SSH アクセスを許可するユーザを設定するには、 お気に入りのテキストエディタで sshd_config ファイルを開き、 以下の行を追加します:
AllowUsers jgarrido jane tux
SSHサービスを再起動して、新しい設定オプションをロードします。
これにより、3人のユーザーだけがリモートマシンにログオンしたり、何らかのアクションを実行できるようになります。
まとめ
OpenSSH を使って、強力で堅牢な SSH サーバを実装することができます。以上、システムを堅牢化するための便利な 3 つのオプションを紹介しました。それでも sshd_config ファイルでオン・オフできる機能やオプションはたくさんありますし、 のような素晴らしいアプリケーションもたくさんあります。




