サーバにSSH接続ができない場合に確認しておきたいポイントを5つ解説します。
vpsを契約したばかりの人や、ネットワーク初心者には少し難しいかもしれませんが、確認方法(修正方法:コマンド付き)をわかりやすく解説します。
SSH接続確認1:ネットワークの疎通確認(ping)
ネットワークの問題 確認方法: ping
コマンドを使って、対象のサーバに到達可能か確認してください。
ping <サーバのIPアドレス>
もし疎通ができていれば以下のような結果になります。
C:\Users>ping 192.168.100.1 192.168.100.1 に ping を送信しています 32 バイトのデータ: 192.168.100.1 からの応答: バイト数 =32 時間 =18ms TTL=51 192.168.100.1 からの応答: バイト数 =32 時間 =31ms TTL=51 192.168.100.1 からの応答: バイト数 =32 時間 =31ms TTL=51 192.168.100.1 からの応答: バイト数 =32 時間 =37ms TTL=51 192.168.100.1 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 18ms、最大 = 37ms、平均 = 29ms
疎通に失敗していれば以下のような結果になります。
C:\Users>ping 192.168.100.1 192.168.100.1 に ping を送信しています 32 バイトのデータ: 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 要求がタイムアウトしました。 192.168.100.1 の ping 統計: パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
疎通に成功した方は次へ。そうでない方は以下のポイントをチェックしてください。
SSH接続確認2:SSHサーバの起動確認
SSHサーバ(SSHD)が起動しているかどうかを確認してください。
サーバに直接アクセスできる場合、以下のコマンドを実行してSSHサービスの状態を確認してください。
sudo systemctl status sshd
起動している場合は以下が表示されます。4行目の「active (running)」を確認。
$ sudo systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2023-03-28 12:30:57 PDT; 2 days ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1080 (sshd) Memory: 3.2M CGroup: /system.slice/sshd.service └─1080 /usr/bin/sshd -D -e Mar 28 12:30:57 localhost.localdomain systemd[1]: Starting OpenSSH server daemon... Mar 28 12:30:57 localhost.localdomain sshd[1080]: Server listening on 0.0.0.0 port 22. Mar 28 12:30:57 localhost.localdomain sshd[1080]: Server listening on :: port 22. Mar 28 12:30:57 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
起動していない場合は以下が表示されます。4行目の「inactive (dead)」を確認してください。
$ sudo systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: man:sshd(8) man:sshd_config(5)
対処方法→以下のコマンドを実行しSSHDを起動します。
sudo systemctl start sshd
SSH接続確認3:SSHポートの確認
SSHのポート番号が変更されている場合にSSH接続が失敗します。
参考 ポート番号とは?
/etc/ssh/sshd_config
ファイルを開いて、Port
の設定を確認してください。
# cat /etc/ssh/sshd_config | grep "^Port" Port 10022
上記の例では、sshd_configファイルの中で、行の先頭に"Port"という文字列が含まれる行を検索しています。上記の検索結果は、SSHのポート番号として「10022」が利用されていることが分かります。
ポートが変更されている場合、SSH接続時に正しいポート番号を指定してください。
ssh -p <ポート番号> <ユーザ名>@<サーバのIPアドレス>
SSH接続確認4:sshd_configファイルの確認
sshd_configファイルは、SSHサーバー(sshd)の設定ファイルであり、SSHの動作や接続に関する様々な設定を変更できます。
sshd_configファイルの確認方法
sshd_configファイルは通常、/etc/ssh/sshd_configパスに保存されています。以下のコマンドで確認できます。
# cat /etc/ssh/sshd_config
特に以下の太字項目が想定通りであるかどうか?を確認してください。
設定項目 | 説明 |
---|---|
Port | SSHサーバーがリッスンするポート番号を指定します(デフォルトは22)。 |
Protocol | SSHのバージョンを指定します(1と2の両方を使用可能)。 |
HostKey | SSHサーバーの秘密鍵のファイルパスを指定します。 |
AllowUsers | SSH接続を許可するユーザーのリストを指定します。 |
PasswordAuthentication | パスワードによる認証を許可するかどうかを指定します(yes/no)。 |
PermitRootLogin | ルートユーザーによるSSH接続を許可するかどうかを指定します(yes/no)。 |
PubkeyAuthentication | 公開鍵による認証を許可するかどうかを指定します(yes/no)。 |
X11Forwarding | X11転送を許可するかどうかを指定します(yes/no)。 |
Banner | SSHログイン前に表示されるメッセージを指定します。 |
UseDNS | DNSリバースルックアップを行うかどうかを指定します(yes/no)。 |
MaxSessions | 同時に接続できるセッション数を指定します。 |
MaxAuthTries | 認証の試行回数の上限を指定します。 |
ClientAliveInterval | クライアントとの接続が有効であることを確認するための間隔を指定します。 |
ClientAliveCountMax | クライアントとの接続が途切れた場合に再試行する回数を指定します。 |
TCPKeepAlive | TCP KeepAliveを有効にするかどうかを指定します(yes/no)。 |
AllowTcpForwarding | TCPポート転送を許可するかどうかを指定します(yes/no)。 |
AllowAgentForwarding | SSHエージェント転送を許可するかどうかを指定します(yes/no)。 |
Compression | SSHトラフィックの圧縮を有効にするかどうかを指定します(yes/no)。 |
LogLevel | ログレベルを指定します(QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3)。 |
SSH接続確認5:認証情報の確認
それでもssh接続ができない場合は接続しようとしているユーザ名とパスワード、または鍵ペアが正しいかどうか確認してください。
案外このポイントで詰まっている場合も多いので改めて確認しましょう。
SSH接続に苦戦したあなたはネットワークの知識不足を痛感したかもしれません。
これを機に、ネットワーク全体についてもっと学びませんか?以下の記事では、初心者でも理解できるようにネットワークの世界を1からわかりやすく解説しています。さらなる知識を手に入れて、ネットワークのプロフェッショナルへの道を歩み始めましょう!こちらの記事をチェックしてみてください。