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

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

Linuxでssh接続が拒否された場合に何を疑えばいいのか?

CentOSやUbuntuなどのLinuxサーバーを初期設定する際、ssh接続がうまくいかずに困ることがある。

しかし connection refused だけでは原因はわからない。

そこで今回はLinuxでssh接続が拒否された場合に疑うことを紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。Linuxもそこそこわかる。

記事を読むメリット

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


ssh接続が拒否される現象

まずssh接続が拒否される現象は何なのか。

現象としてはLinuxにTera Termなどのアプリからssh接続をしようとした際に「接続が拒否されました」や「connection refused」などのメッセージが出て接続できない事が起こっている。



実際に遭遇した人の嘆き

実際にLinuxでssh接続が拒否されて困っている人は多い。

Twitter上でピックアップしてみると、以下のようなつぶやきが確認できた。


皆ssh接続を試みたところ connection refused が発生し、困っていることがわかる。


実際「接続が拒否されました」とだけ言われても、「で、どうしろと?」みたいになっちゃいますよね



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が競合していてもサーバーマシン側からはネットワークに接続できる
    ということだ。

    サーバーには接続できなくてもサーバー側からはネットワークを認識しているので、IPが競合している可能性に気付きにくい。

    このような気付きにくい原因を取りこぼさないためにも、トラブル時は体系的に調査を行い、可能性のある原因をひとつひとつ検証していく必要がある。



    まとめ

    今回はLinuxでssh接続が拒否された場合に疑うことについて説明した。

    ssh接続が拒否された場合には以下の点を踏まえて、ssh接続ソフト、接続経路、IP衝突を疑ってみるべし。

    サーバー側のチェック内容

  • ssh接続を受け入れるソフトウェアをインストールしているか
  • ssh接続を受け入れるソフトウェアが起動しているか
  • サーバーのIPをネットワークに周知できているか
  • 外部からの接続を拒否していないか
  • FWで接続を弾いていないか
  • クライアント側のチェック内容

  • サーバーに対してネットワーク経路が確保できているか

  • IP競合は結構気づきにくいので、「とりあえず別のIPを設定してみて接続確認してみる」くらいしてもいいかもしれません


    この記事を読んでいる方は既にLinuxマシンを所持しているかと思う。

    しかしLinuxマシンの用途によっては小型PCで運用する方が消費電力的にもリーズナブルなこともある。

    小型PCのオススメ機種について書いた記事があるので、是非そちらも見てほしい。

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

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

    Translate »

    © 2021 ITips