ソフトウェア ネットワーク

Linuxでssh接続が拒否された場合に疑うこと

Linuxでssh接続が拒否された場合に疑うこと

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 installnmap を利用できるようにする。

$ 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衝突を疑ってみるべし


KRSW

駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

役に立ったらシェアしてくれると励みになります。
If you felt this article is useful, please share.
にほんブログ村 IT技術ブログへ

-ソフトウェア, ネットワーク
-

Translate »
Social media & sharing icons powered by UltimatelySocial

Copyright© ITips , 2020 All Rights Reserved.