Linuxでssh接続が拒否された場合に疑うことは何か?
CentOSやUbuntuなどのLinuxサーバーを初期設定する際、ssh接続がうまくいかずに困ることがある。
今回はLinuxでssh接続が拒否された場合に何を確認すれば良いかを紹介する。
ssh接続が拒否される現象
LinuxにTera Termなどのアプリからssh接続をしようとした際に「接続が拒否されました」や「connection refused」などのメッセージが出て接続できない事を「ssh接続が拒否される」という。
ssh接続が拒否された場合に確認すること
ssh接続が拒否された場合には以下の点を確認する。
- サーバー側
- ssh接続を受け入れるソフトウェアをインストールしているか
- ssh接続を受け入れるソフトウェアが起動しているか
- サーバーのIPをネットワークに周知できているか
- 外部からの接続を拒否していないか
- FWで接続を弾いていないか
- クライアント側
- サーバーに対してネットワーク経路が確保できているか
ssh接続を受け入れるソフトウェアをインストールしているか
ssh接続を受け入れるソフトウェアとしては openssh-server
があるので、 apt-get install
でインストールしてしまうと良いだろう。
$ sudo apt-get install openssh-server
インストール後に
$ ssh -V
を入力して
OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.6, OpenSSL 1.0.1f6 Jan 2014
と表示されたら正常にインストールされています。
Ubuntu 14.04 でSSHを有効にする方法 - wide_snow’s blog
ssh接続を受け入れるソフトウェアが起動しているか
openssh-server
が起動しているか確かめる方法の一つとして、サーバー上でサーバー自身に対してssh接続を試みると良い。
ログインできれば openssh-server
は動作している。
$ ssh (サーバーのIPアドレス)
サーバーのIPをネットワークに周知できているか
サーバーに設定されたIPを確認するのであれば ifconfig
のコマンドでIPを確認できる。
ip a
コマンドでも確認できる。
しかしサーバーに設定されたIPがネットワーク上に周知されているかどうかは ifconfig
のコマンドではわからない。
もし他のマシンも同じIPを使っていた場合、ネットワーク上では別のマシンにIPの優先権が発生しているかも知れない。
そこで nmap
コマンドでネットワーク(LAN)内に周知されているIPとMACアドレスを調べる。
まずは apt install
で nmap
を利用できるようにする。
$ sudo apt install nmap
その後、ネットワーク(以下の例では192.168.0.xxx系)を指定してIPとMACアドレスを調べる。
$ sudo nmap 192.168.0.0/24 -sP
そして表示されたIPに対応するMACアドレスが、 ifconfig
で確認したMACアドレスと一致しなければ、サーバーで使おうとしていたIPは別のマシンで使われている事がわかる。
ssh 接続したら port Connection refused と出る時 | TOMMY NOTES
nmapをインストール
外部からの接続を拒否していないか
/etc/hosts.deny
で接続を拒否していないか確認する。
クライアント側からの接続を拒否する設定が書かれていたら消すなりコメント化するなりする。
$ sudo nano /etc/hosts.deny $ sudo reboot
設定ファイル(/etc/hosts.allow、/etc/hosts.deny)の編集
ネットワーク - hosts.allow hosts.denyの反映方法について|teratail
「hosts」ファイルでアクセス制限をする方法 - renoji.com
FWで接続を弾いていないか
ufw status
でFWで許可や拒否している通信を確認する。
$ sudo ufw status
もしssh接続に使う22番ポートが許可されていない場合は許可をする。
$ sudo ufw allow ssh
Ubuntuのポート開放方法(ファイアウォールを設定する) - Qiita
サーバーに対してネットワーク経路が確保できているか
クライアント側からサーバー側に対してネットワーク経路が確保できているかどうかは ping
で確認する。
レスポンスが確認できれば経路は確保できている。
$ ping (サーバーのIPアドレス)
実際の事例
私もLinuxサーバーを立ち上げたがリモート接続できない問題に当たったことがある。
サーバーマシンからはインターネットも繋がるし、リモート接続をしようとしているクライアントマシンもsshコマンドでIP自体は認識している。
しかしssh接続しようとすると
「接続が拒否されました」
というメッセージが返ってくる。
そこで先に述べた調査をしたところ、
同じIPが別のマシンで使われている
ということがわかり、サーバーマシンには別のIPを設定することで解決した。
この問題の気づきにくいところは
IPが競合していてもサーバーマシン側からはネットワークに接続できる
ということだ。
サーバーには接続できなくてもサーバー側からはネットワークを認識しているので、IPが競合している可能性に気付きにくい。
このような気付きにくい原因を取りこぼさないためにも、トラブル時は体系的に調査を行い、可能性のある原因をひとつひとつ検証していく必要がある。
まとめ
- ssh接続が拒否された際は、ssh接続ソフト、接続経路、IP衝突を疑ってみるべし