web-dev-qa-db-ja.com

再起動時にSSHがデフォルトポートにリセットされる

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

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

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

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

追加の詳細:

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

EDITイベントのシーケンス:

  1. /etc/ssh/sshd_configでSSHポートを22から54747に変更します
  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
12
3rgo

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

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

[Socket]
ListenStream=
ListenStream=54747

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

次に、Sudo systemctl daemon-reloadを実行してsystemdに変更を通知し、sshデーモンが以前に実行されていた場合はSudo systemctl reload sshを実行します。

2
Robie Basak

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サーバーを再起動した後、さらに何かを行う前に、sshサーバーのターミナルセッションから(アトラス)タイプ

ssh localhost

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

ssh -p 54747 localhost

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

Sudo service sshd status
0
jones0610

考えられる原因

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

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

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

0
G_Style

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

cp /etc/ssh/sshd_config $HOME
Sudo apt-get --reinstall install openssh-server
0
pa4080

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

0
Marco