SSHできない?原因を解決する方法とは?

SSHができない時

SSHができない時の原因と対処法

sshは別のマシンへのセキュアなリモート接続方法です。

sshができなくなるというトラブルがおこることがあります。SSHできない原因を調べる方法やよくあるトラブルを紹介します。ここのトラブルシューティング集ではこれまでSSHできていた→SSHできなくなったという状態を仮定しています。基本は接続できなかった時の表示やログを見て調べましょう。

  • インターネットは接続されてるか?(物理的に無線LAN、ケーブル刺さってるか?)
  • 対象のホスト名・IPアドレスは正しいか?
  • ルーティング設定は正しいか?
  • リモートホストは起動しているか?
  • リモートホストのsshdは起動しているか?
  • ファイアウォールで許可されているか?(firewalld, iptables)

物理的なトラブルは起きていないか?

意外と見落としがちなのが物理的なトラブルです。今まで正常だったのにいきなりできなくなったというときは物理関係を疑ってみるのも重要です。ハードウエアの故障(ルーター、スイッチ、NIC)も起こりえます。物理的なトラブルはSSHに限らず他の部分にもトラブルを起こしているはずなので気づくのは早いと思います。

  • マシンは起動してるか?(目視や管理ツール)
  • ルータやスイッチトラブルは起きていないか?(tracerouteでパケットの到達を確認)
  • 自分のマシンはネットワークに接続しているか?

人為的なミス

よくあるミスはリモートログイン先のIPアドレスを間違えているという単純なミスです。数字なので間違っていることに気付きににくいです。自分が接続しようと思っていた接続先を勘違いしていることもあります。初歩的ですが確かめましょう。

  • 今接続しようとしているホストが接続したいホストか?
  • 接続先のIPアドレスやホスト名は正しいか?ポート番号はあっているか?(22では無い時もある)
  • 今いるホストは正しいホストか?(多段SSHの場合)
  • 指定した秘密鍵は正しいか?パスフレーズやパスワードは正しいか?

ネットワークトラブル

物理的なトラブルが起きたり、アップデートや再起動などが原因で設定が変わってネットワークトラブルが起こることがあります。

ネットワークトラブルは関係するサーバーだけでなく、ルータやスイッチ、ネットワークケーブルなどのトラブルを考慮しましょう。

トラブルシューティング

ネットワークに接続してるか?

自分のマシンがネットワークにつながっていなければ話になりません。無線LANに接続していないとか、特定のLANに接続しているのか?を確認しましょう。ケーブルが外れかかっているということもよくあります。

sshdは起動しているか?

接続先のマシンがアップデートや再起動をしていた場合sshd(デーモン)が起動していない場合があります。その場合はstatusでsshdの起動状態を確認し、起動していない場合はstartで起動します。

systemctl status sshd

systemctl start sshd

systemctlでsshdの起動状態を確認

systemctlでsshdの起動状態を確認

再起動時に自動起動させたい場合は以下のように設定します。

systemctl enable sshd

接続先のポートを確認

SSH以外でログインできる場合(直接やVNCなど)はポートの情報を確認しましょう。netstatコマンドでsshdが使用しているポートを確認しましょう。ポートが変更されている場合はポート番号が22から変更されているのが確認できます。また、listen状態(接続待ち)でないと接続できません。

#  netstat -altpn

firewallに拒否されていないか?

firewalldやiptablesの設定が変更されていないか?起動していなかったものが起動している場合もあります。

systemctl status firewalld

systemctl status iptables

で起動状態を確認しましょう。サービスやポートの通信が拒否されていないか確認しましょう。問題が無ければfirewallの設定を一時的に停止していみる方法もあります。

SSH設定の確認

SSHの設定関連を確認しましょう。/etc/ssh/ssh_configを確認します。

  • 公開鍵認証の場合秘密鍵は正しいか?
  • パスワード認証の場合パスワードは正しいか?
  • 使用するポートは正しいか?

原因を探る方法

pingやtraceruoteを使う

ネットワークの疎通を確認する簡単な方法はpingを飛ばすことです。pingが不達であればネットワークトラブルが起きている可能性があります。tracerouteではpingが経由するサーバーを追うことができます。

sshデバッグモードを使う

ssh -vのオプションを使うと接続過程のログが表示されます。実際にvオプションを使ってみた画面です。最終的にconnection refused(接続拒否)されています。

ssh vオプションでdebugログを見る

ssh vオプションでdebugログを見る

/var/log/secure (RedHat系) または /var/log/auth.log (debian)

です。

コメントを残す

メールアドレスが公開されることはありません。