🐧 Linux 総合学習プラットフォーム
サーバ構築 ・ 中級

SSHサーバの基本

サーバはディスプレイを繋がず、手元のPCからネットワーク越しに操作するのが普通です。その入口が SSH で、サーバ側では sshd というサービスが 22番ポートで待ち受けます。systemctl で sshd を起動・自動起動にし、firewall-cmd で ssh サービスを許可すれば、ssh ユーザ名@サーバのIP で接続できます。設定は /etc/ssh/sshd_config で管理します。

サーバは、机の上のパソコンのようにディスプレイやキーボードを直接つないで操作することはほとんどありません。データセンターやクラウドに置かれたサーバを、手元のPCからネットワーク越しに操作するのが普通です。その遠隔操作の入口を提供するのが SSH(Secure Shell)です。SSH は、ネットワーク上を流れる通信をすべて暗号化したうえで、離れた場所のサーバのシェルを手元で操作できるようにする仕組みです。暗号化されているため、途中で通信を盗み見られてもパスワードや操作内容が漏れにくく、インターネット越しの操作でも安全に使えます。サーバ構築では、まずSSHで入れるようにすることが、その後のすべての作業の土台になります。

サーバ側で待ち受ける sshd

SSHはクライアントとサーバに分かれており、手元のPC側で ssh コマンドを打つと、サーバ側で待ち受けている sshd というサービス(デーモン)がそれを受け付けます。sshd は既定で22番ポートを使い、接続を待ち受けます。RHEL/MiracleLinux系では sshd は最初から導入・起動されていることが多いですが、確認と設定は他のサービスと同じ systemctl で行います。sudo systemctl status sshd で状態を見て、active (running) なら動いています。起動と自動起動をそろえるには sudo systemctl enable --now sshd です。自動起動(enable)を忘れると、サーバを再起動した瞬間にSSHで入れなくなり、遠隔のサーバだと復旧が一気に難しくなるため、enable は特に重要です。

ファイアウォールで22番を許可する

sshd が起動していても、ファイアウォールがSSHの通信を通さなければ外部から接続できません。firewalld には ssh というサービス名が用意されているので、sudo firewall-cmd --permanent --zone=public --add-service=ssh で許可を追加し、sudo firewall-cmd --reload で反映します。実際にはインストール直後の public ゾーンには最初から ssh が許可されていることが多いのですが、ゾーンを変えた場合や明示的に絞った場合は、自分で許可する必要があります。許可後は sudo firewall-cmd --list-all の services: 欄に ssh が含まれていること、sudo ss -ltnp で22番が LISTEN になっていることを確認しておくと確実です。

接続する

サーバ側の準備(sshd の起動・自動起動、22番の許可、待ち受けの確認)が整えば、手元のPCから ssh ユーザ名@サーバのIPアドレス で接続します。たとえば ssh user01@172.16.251.100 のように指定します。初回接続時には、接続先サーバの鍵を信頼してよいかを尋ねる確認(fingerprint の確認)が出るので、問題なければ yes と答えます。これは接続先が本物のサーバかを利用者に確かめさせる仕組みで、なりすましを防ぐ意味があります。続いてパスワードを入力すると、サーバのシェルに入れます。プロンプトがサーバ側のものに変われば、以降はそのサーバ上で直接コマンドを打っているのと同じように操作できます。接続を終えるときは exit でログアウトします。なお、既定の22番以外で待ち受けている場合は ssh -p ポート番号 ユーザ名@IPアドレス のように -p でポートを指定します。

設定ファイルと鍵認証

sshd の挙動は設定ファイル /etc/ssh/sshd_config で管理します。待ち受けポートを指定する Port、root での直接ログインの可否を決める PermitRootLogin、パスワード認証を許すかどうかを決める PasswordAuthentication、といった項目をここで指定します。設定を書き換えたら、他のサービスと同様に sudo systemctl reload sshd で反映します。本番運用で強く推奨されるのが、パスワードの代わりに「鍵ペア」を使う公開鍵認証です。手元で秘密鍵と公開鍵のペアを作り、公開鍵だけをサーバの ~/.ssh/authorized_keys に登録しておくと、パスワードを送らずに、対応する秘密鍵を持つ人だけが接続できるようになります。パスワードの総当たり攻撃に強く、安全性が格段に上がるため、慣れてきたら鍵認証へ切り替え、設定ファイルでパスワード認証を無効にするのが定石です。あわせて、root での直接ログインを禁止し、一般ユーザで入ってから sudo で権限を昇格する運用にすると、より安全になります。

よくある失敗と実務の使いどころ

SSHでつまずく定番は、接続できない原因の切り分けです。Connection refused なら sshd が動いていない(または別ポート)、接続が無反応のまま固まるならファイアウォールやネットワーク経路でブロックされている、Permission denied ならユーザ名・パスワードの誤りや設定での認証方式の制限、と当たりがつきます。この切り分けは、サーバ側で systemctl status sshd(動いているか)→ ss -ltnp(22番で待ち受けているか)→ firewall-cmd --list-all(ssh が許可されているか)の順にたどると確実です。とりわけ怖いのは、リモートのサーバで sshd_config を書き換えて reload した結果、自分が締め出されてしまう事故です。設定を変えるときは、いま繋がっているセッションは残したまま別のセッションで接続できるか試す、という安全策をとると、万一のときも復旧できます。SSHはサーバ運用のすべての入口なので、確実に入れる状態を保つことが何より大切です。

この項目に出てくる用語

SSHえすえすえいち
ネットワーク越しにサーバを安全に遠隔操作する仕組み。
ポートぽーと
通信の窓口を表す番号。サービスごとに使い分ける。
サービス(デーモン)さーびす
背後で常時動き続け、要求に応えるプログラム。

関連コマンド

systemctlssfirewall-cmd

▶ 学習アプリでこの続きを学ぶ・演習する