SSHは再起動時にデフォルトのポートにリセットされます


12

ホームサーバーの(/etc/ssh/sshd_configファイル内の)デフォルトのSSHポートをポート54747に変更してsshから、sshdサービスとサービスを再起動しました(どちらかを確認して、安全のために両方を実行しました)。構成をテストするために、ログアウトしてから問題なく再度ログインしました。

数日後、私は適切な更新プログラムをインストールし、サーバーを再起動しました。(ポート54747で)SSHに戻そうとしたときに、接続拒否エラーが発生しました。

何らかの理由で、デフォルトのポートでSSHを試してみましたが、うまくいきました!私は戻ってsshd_configをチェックしましたが、まだカスタムポートがありました。そこでsshsshdサービスとサービスを再起動すると、「通常の」動作(ポート54747のSSH)に戻りました。再起動を試みましたが、接続が再び拒否されました...

誰が私が間違ったことを知っていますか?

追加の詳細:

  • Ubuntu 16.04.2 LTS
  • サーバーもHTPCを使用しており、テレビでセッションを開いています(SSHと同じユーザー)
  • ラップトップのRSAキーを使用してSSHで接続し、パスワード認証を無効にしました
  • を使用して再起動してsudo reboot -h nowいましたが、検索した後、一部の人によって落胆していることがわかりましたのでsudo reboot、試してみましたが、違いはありません

イベントの編集シーケンス:

  1. SSHポートを22から54747に変更します /etc/ssh/sshd_config
  2. sshおよびsshdサービスを再起動します
  3. 現在のSSHセッションを終了する
  4. SSHがポート54747で正常に戻ります
  5. リブート
  6. ポート54747でSSH接続エラーが発生しましたが、ポート22で成功しました
  7. sshおよびsshdサービスを再起動します
  8. ポート54747でSSHが正常に戻り、ポート22で接続エラーが発生しました
  9. 再起動して6に戻る

編集1: netstat出力

rgo@ATLAS:~$ sudo netstat -lntp | grep :54747
rgo@ATLAS:~$ sudo netstat -lntp | grep :22
tcp6       0      0 :::22                   :::*                    LISTEN      1/init  

編集2: service sshd status

● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

編集3: lsof -i | grep ssh

systemd      1     root   46u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
systemd      1     root   49u  IPv6  14641      0t0  TCP *:ssh (LISTEN)
sshd      4088     root    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4088     root    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    3u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)
sshd      4202      rgo    4u  IPv6  42724      0t0  TCP ATLAS:ssh->192.168.1.27:49837 (ESTABLISHED)

参考までに、ATLASはリモートサーバーのホスト名、192.168.1.27はラップトップのLAN IP、ステップ6と7の間でコマンドが実行されました

ufw status

Status: inactive

編集4: ps -ef |grep sshd

root      4088     1  0 22:40 ?        00:00:00 sshd: rgo [priv]
rgo       4202  4088  0 22:40 ?        00:00:00 sshd: rgo@pts/1 sshd

私は決してあなたを中傷していません。しかし、私はあなたが要求されたようにsshサーバーにコマンドを入力していないように見えます。sshデーモンが停止している場合、sshのライブ接続はできません。......sshサーバーで、ps -ef | grep sshdは/ usr / sbin / sshd -Dプロセスを返します。何人かの人々が助けていますが、あなたをすべての異なる方向に送ります。それがあなたに役立つなら、IMであなたとチャットできてうれしいです。
-jones0610

たぶん、同じユーザーとのセッションを既に開いており、Kodiでテレビに表示しているからでしょうか?
3rgo

こんにちは、@ 3rgo、これを解決できましたか?
pa4080

こんにちは !ありません、私はまだこの問題が発生しています... Luckylyは、私は時々私のホームサーバーを再起動する必要はありませんが、それは私の自動化プロセスの一部を壊すので、それは、まだ痛みだ...
3rgo

いくつかのアイデアがあります。(1)ポートをデフォルト値に変更してから、システム全体を再起動することができます。次に、目的の値に再度変更してみてください。(2)別の値で試してくださいPort 10285。Googleは54747の結果をいくつか示しています...(3)また、SSHサーバーは複数のポートを同時に使用できます。ポートごとに2つの個別のディレクティブを作成します:Port 22Port 54747、2番目のファイアウォールのみを開きます。(4)の先頭に配置されたMatch LocalPortディレクティブを試すことができsshd_cます。
pa4080

回答:


2

sshは、設定に応じてsystemdによって「ソケットがアクティブ化」される場合があります。つまり、リスニングポートを設定するのは最初はsystemdであり、sshdはクライアントが最初に接続したときにのみ開始されます。これは、起動時間を短縮するためです。サービスデーモンはオンデマンドでのみ起動されます。

ただし、これはsystemdを一致するポートに構成する必要があることを意味します。/lib/systemd/system/ssh.socketリストにあるシステム構成が見つかりますListenStream=22。これをオーバーライドするには、以下を含むファイルを作成します/etc/systemd/system/ssh.socket.d/port.confssh.socket.d必要に応じてディレクトリを作成します)。

[Socket]
ListenStream=
ListenStream=54747

目的のポートに番号を変更します。最初の空白のエントリは以前のデフォルトを消去し、後続のエントリは新しいものを追加します。これは、出荷時のデフォルトをオーバーライドし、変更に加えて/lib/systemd/system/ssh.socket実行する必要があります/etc/ssh/sshd_config

次に、実行sudo systemctl daemon-reloadしてsystemdに変更を通知しsudo systemctl reload ssh、sshデーモンが以前に実行されていたかどうかを確認します。


この回答は非常に有望に見えます/etc/systemd/system/ssh.socket.d/port.confが、無視されており、再起動するとポートが22にリセットされます。ファイル名は関係ありますか?Ubuntuの systemdオーバーライドに関する適切なドキュメントが見つかりません。
メストレリオン

で終わる限り、ファイル名は関係ありません.conf。参照してくださいにsystemd-あるsystem.conf(5)にsystemdオーバーライド設定ファイルの詳細については、を。
ロビーバサック

また、実行systemctl status ssh.socketして、有効になっているか、何をリッスンしているかを確認できます。
ロビーバサック

2
これは動作します!!! 最後に、この謎は解決されました!しかし、その後、デフォルトの22ポートとカスタムポートの両方のポートを使用してアクセスできることに気付きました。ListenStream=カスタムポートの前に行を追加すると、これを防止できましたが、理由はわかりません。たぶん、これListenStream=22はデフォルトの設定を「クリア」します/lib/systemd/system/ssh.socketか?設定を上書きする奇妙な方法。これを答えに追加する価値があるのでしょうか?
メストレリオン

@MestreLionああ、はい、それは正しいです。答えを更新します。ありがとう!
ロビーバサック

0

/etc/ssh/sshd_configファイルのポート設定を確認します。sudoまたはsudoグループのユーザーとして編集していることを確認してください。ポートを設定するために必要なことは、1行タイプでPort 54747.、実行してsshサービスを再起動することです。次に、Rebootおよびtestをservice sshd restart.実行して、sshがそのポートでリッスンしていることを確認しますsudo netstat -lntp | grep ssh.

ネットワーク設定も確認してください。企業ネットワーク上にいる場合は、正しいVLANにいることを確認してください。


バックアップを行い、ファイルをsudoとして編集し、デフォルトのPort 22Port 54747のみを変更しました。また、あなたがくれたnetstatには出力がありませんでした。OPに変更したものを追加しました
3rgo

正しいキーで接続していますか?したがって、次のように接続する必要がありますssh -i key.txt user@ipaddress -p 54747。また、そのポートで他の何かがリッスンしているかどうかを確認します。やりますsudo lsof -i | grep ssh。ファイアウォールをチェックして、何もブロックしていないことを確認することもできます。行う:sudo ufw status
G_Style

54747でポートが使用されていません(OPを参照して、追加しました)。コマンドの出力もそれに追加しています
-3rgo

あなたの問題についてさらに考えた後、私はそれがあなたのセットアップではなく、あなたが経験しているこの問題を引き起こしている再起動の方法であると感じています。再起動するときは、コマンドを使用する必要がありますshutdown -r now。それを試して、結果をお知らせください。参照のためのこの記事を参照してください。askubuntu.com/questions/483670/...
G_Style

私は試みたが、同じ結果を得ましたsudo reboot -h nowか`のsudo reboot``
3rgo

0

時々物事がうまくいかないことがあります。私があなたの場所にいた場合、私は試してみます:

cp /etc/ssh/sshd_config $HOME
sudo apt-get --reinstall install openssh-server

サーバーに物理的にアクセスする必要がありますか?もしそうなら、私は明日の夕方にのみそれを行うことができます
3rgo

こんにちは@ 3rgo、私はあなたが物理的なアクセスを必要としないと思います。VPSで試してみました。また、SSH経由でログインしている間に、自宅のUbuntuサーバーにアクセスしました。接続も中断されませんでした。cpコマンドは念のため、通常、再インストールプロセスは構成ファイルに影響しません。
pa4080

こんにちは!再インストールを試みましたが、何も変わりませんでしたが、まだ同じ問題があります
...-3rgo

0

sshは、sshサーバーへのユーザーセッション接続を調停および維持するクライアントプロセスです。sshdは、ssh接続要求をリッスンして認証するためにsshサーバーで実行されるデーモンです。

sshdサービスの開始時に読み取られるsshdサーバー上の構成ファイル(編集するにはsudo権限が必要)

/etc/ssh/sshd_config

サービスは

/etc/systemd/system/sshd.service

sshd_configファイルの再読み取りを伴うsshdを再起動するには

sudo service sshd restart

sshdデーモンがリッスンしているポート、およびその他の役立つ情報をsshサーバータイプで確認するには

sudo service sshd status

指定された順序でこれらの手順を実行します。

sshサーバーを再起動します

sshサーバーでターミナルセッション開きます(ssh接続ではありません)。

タイプ hostname

ホスト名がsshサーバーの名前(この場合はAtlas)を返さない場合は、前の手順を正しくやり直してください。

grep Port /etc/ssh/sshd_config -ポート番号をメモします。指定したものでなければなりません

sudo service sshd status

指定したカスタムポートでアクティブで実行中でありリスニングしていることがステータスから報告された場合は、それで十分です。そうでない場合、サービスの起動は、変更したsshd_configファイルではなく、デフォルト情報を含む別の構成ファイルを呼び出している可能性があります。サービスが開始しなかった場合(死んでアクティブで実行されていないなど)、これはあなたが尋ねたものとは異なる問題です。

これらの手順は、おそらくあなたが尋ねている問題の根本原因を特定するでしょう。

テスト目的および単純化のため:クライアント側では、ターミナルセッションから次のようにsshサーバーにsshします。

ssh -l username -p 54747 hostname

OPのフィードバックに基づいて、sshdは起動時に起動しないが、手動で起動すると正しく起動すると思われます。ポート22を介したssh接続の成功は、sshサーバーへの接続ではなく、他の何か(localhostなど)への接続である可能性があります。sshタイプを介して接続した後、これを証明またはデバンクするには

hostname

OPが言っていることに基づいて、ホスト名はsshサーバーのアトラスではないと推測しています。

これをさらに分離するには、sshサーバー(Atlas)のターミナルセッションから、sshサーバーの再起動後、さらに何かを行う前に、次のように入力します。

ssh localhost

これが失敗する場合は、そうする必要があります。

ssh -p 54747 localhost

これが機能しない場合は、実行時に得られた結果を確認します

sudo service sshd status

こんにちは !よりよく理解できるように、一連のイベントを追加しました。コマンドを使用してSSHを実行ssh -p <PORT> <USER>@<IP>し、秘密鍵をエージェントに追加します。
3rgo

とても良い。手順6aを実行します。sshdサーバーで、sudoサービスのsshdステータス。ポート22が報告された場合、偽のsshd_configファイルが呼び出されています。
jones0610

「非アクティブ(デッド)」と言います(OPの全出力を
すぐに表示

死んでいる(アクティブで実行されていない)場合は、自分が考えているマシンにsshしていません。sshdサーバーで、ps -ef | grep sshdと入力します。sshdサーバー上のsshdデーモンが実際に停止している場合、sshdプロセスは実行されないため、使用するポートに関係なくsshdにsshできません。
jones0610

2つのsshdプロセスが見つかりました...詳細な出力を追加しました
3rgo

0

おそらく、aptがsshd_configとパッケージの違いを検出したときにYと答えただけでしょう。パッケージ管理者のバージョンをインストールするか、それとも保持するかを尋ねられます。


1
私はそのようなことを尋ねられたことを覚えていませんが、そうだと仮定すると、それを修正するために何ができますか?
3rgo

0

考えられる原因

  1. 別のsshdバイナリがブート時に開始されるか、sshdが別の構成で開始されます。おそらくsystemdが原因です-ファイル経由でポートを変更する別の方法があります/usr/lib/systemd/system/sshd.sockethttps : //www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. 正しい/ etc /または/ etc / sshは、sshdの起動時にまだマウントされていませんが、ブートプロセスの後半でマウントされるマシン上の別のボリュームですか?
  3. sshdにはブート時に設定ファイルへの読み取り権限がありませんが、sshdが起動するかどうかはまったくわかりません。

2
あなたはそれに夢中だと思います。そして、それが多くのアップグレードを経たサーバーである場合、スタートアップスクリプトのカクテル(sysv-init、upstart、systemd)が存在する可能性があります。おそらく、/ etc /内のすべてのファイルを単純な検索およびチェックfind /etc/ -iname "*ssh*"して、より多くの手がかりを探します。
バズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.