この記事では、Linux®サーバーでSecure Shell(SSH)のトラブルシューティングを行う方法について説明します。
サーバーにSSHで接続できない場合は、発生するエラー(またはエラーの欠如)に注意する必要があります。次のリストは、考えられるエラーの一部を示しています。
このタイプのエラーは、誤った資格情報を使用してSSH経由でログインするたびに発生します。このエラーが発生した場合は、次のことを確認できます。
- ユーザー名とパスワードを正しく入力したことを確認してください。
- SSHキーペアを使用している場合は、ローカルマシンに秘密キーがインストールされていることを確認してください。
ポート22:接続が拒否されました
このエラーは、次の理由で発生します。
- SSHがインストールまたは実行されていません。
- SSHは別のポートでリッスンしています。
- ファイアウォールルールではSSHは許可されていません。
ネットワークエラー:接続がタイムアウトしました
このエラーは、サーバーまたはローカルマシンのネットワーク接続の問題が原因で発生することがよくあります。これらのエラーが発生した場合は、ローカルコンピューターがインターネットに接続されていることを確認してください。接続されている場合は、サーバー接続もチェックして、サーバーが実行されていることを確認します。
サーバーの外部からSSHをトラブルシューティングする一般的な方法は次のとおりです。
nmap
nmap
は、ネットワーク探索ツールおよびセキュリティまたはポートスキャナーです。このツールを使用して、SSHのポートがサーバーで開いているかどうかを確認できます。次の例は、コマンドとその出力を示しています。
$ nmap <ip-address-of-host>
Starting Nmap 6.40 ( https://nmap.org ) at 2020-03-21 23:44 UTC
Nmap scan report for <ip-address-of-host>
Host is up (0.033s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 4.35 seconds
ssh -vvv
ssh
を使用する -vvv
を使用 サーバーにSSHで接続すると、flagsは詳細な出力を生成します。このコマンドは、問題が発生する可能性のある場所を正確にトラブルシューティングするための有用な情報を提供します。
SSHに問題がある場合は、緊急コンソールを使用してログインし、サーバーのトラブルシューティングを行って、次の条件を確認できます。
SSHプロセス
まず、次のコマンドを実行して、SSHプロセスが実行されていることを確認します。
- Ubuntu®16.04以降、Debian®8以降、Centos®7以降の場合:
systemctl status sshd
- Centos 6の場合:
service sshd status
サービスが実行されていない場合は、次のコマンドを使用してプロセスを開始できます。
- Ubuntu 16.04以降、Debian 8以降、Centos 7以降の場合:
systemctl start sshd
- Centos 6の場合:
service sshd start
netstat
netstat
コマンドは、サーバー上の現在の接続を表示します。このコマンドは、SSHが実行されているポートを確認するための良い方法です。 netstat
を実行すると 、フラグ-plnt
を使用します 次の出力を取得するには:
# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::22 :::* LISTEN 13631/sshd
SSH構成ファイル
SSH構成ファイル/etc / ssh / sshd_config 、SSH構成を設定します。構成ファイルには多くのオプションがありますが、注意すべき点がいくつかあります。
Port 22 <---- The port ssh runs on
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
~
~
~
# Ciphers and keying
#RekeyLimit default none
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes <---- Allows or block users logging in as root
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes <---- Will state whether or not a user needs an ssh key to log in
または、grep
を使用することもできます これらの特定の行を検索するコマンド。 grep
を使用する場合 コマンドでは、特定のフレーズを検索するときに特定する必要があります。句読点、大文字と小文字、およびスペルに注意してください。
$ sudo grep Port /etc/ssh/sshd_config
# Port 22
ネットワーク接続があり、すべての構成が正しく、SSH経由で接続できない場合は、サーバーのファイアウォールルールを確認することをお勧めします。 Linuxサーバーでは、 iptables これらのルールがあります。 iptablesにファイアウォールルールを一覧表示するには 、コマンドiptables -L
を実行します 。 iptablesの詳細については 、iptablesの概要をお読みください。
fail2ban
fail2ban
は、一定回数のログイン試行の失敗後にIPアドレスをブロックするアプリケーションです。刑務所をチェックするには、コマンドfail2ban-client status
を実行できます。 。このコマンドは、サーバー上に構成されているすべてのjailと、それらのjail内にあるIPアドレスを表示します。
他のすべてが失敗した場合は、ログファイルに移動します。これらのファイルは、サーバーに到達しているかどうか、無効なパスワードを使用しているかどうかなどに関する情報を提供します。確認する必要のあるログファイルには、次のファイルが含まれます。
- UbuntuまたはDebian: /var/log/auth.log
- CentOSまたはRHEL®: / var / log / secure
これらのログファイルを検索するときは、less
を使用できます ファイル全体を解析し、特定の時間または文字列を探すコマンド。コンソールからサーバーにログインしている場合は、tail -f
を使用できます。 サーバーにSSHで接続しようとしている間、ログに記録されます。その後、ログファイルの更新をリアルタイムで確認できます。