全体のシーンは次のとおりです。
- SSH インストール apt-get インストール SSH
- 新しいユーザーを作成しました。 (これを行う必要がないことを知っています。)
- 新しいユーザーを使用してSSH経由でシステムにログインする
- root ログインを許可するように /etc/ssh/sshd_config を変更します。
- systemctl status ssh コマンドを実行します。
- サービスが実行されていることを示します。
- systemctl stop sshの実行(サービスcmdが利用可能であることを知っています)
- まだSSHでログインしています!これがどのように機能するのかわかりません。
- 新しいパテインスタンスを開いて接続しようとしましたが、サービスに接続できなかったかタイムアウトしたことが表示されます。
- systemctl start sshを実行し、新しいパテインスタンスを使用してユーザーとしてログインしようとすると成功します。
なぜ最初のインスタンス(sshを介してログインした新しいユーザー)を解放しなかったのか疑問に思います。初めてログインしたとき、sshはポート22で接続を受け入れ、新しいWebソケットポート(マルチスレッド)を開き、そのポートに自分の接続を割り当て、ポート22で別の接続をリッスンしていたためです。接続してログインするときにサービスが停止した後にタイムアウトと言われますか?
私はsshが自分が開く任意のポートを追跡しないと確信しています。これはおそらくバグ(壊れていない)と言うことができます。 Cプログラムもsshを追跡し、sshサービスが停止したらインスタンスを削除する必要はありませんか?どんなアイデアがありますか?
ベストアンサー1
これは意図的なものです。 SSHを使用してシステムに接続すると、ターゲットシステムのデーモンは新しいプロセスまたはsshd
2つのプロセス(1つはターゲットユーザーとして実行され、root
もう1つはターゲットユーザーとして実行されます)を作成します。 SSHセッションは、元のプロセスではなく、この新しいプロセスによって処理されます。マンページから:
sshd
クライアントの接続を受信します。通常、起動時に起動されます/etc/init.d/ssh
(または/etc/init/ssh.conf
Upstart initデーモンを使用するシステムでは)。着信接続ごとに新しいデーモンを作成します。分岐されたデーモンは、鍵交換、暗号化、認証、コマンド実行、およびデータ交換を処理します。
サービスを停止すると、デフォルトのデーモンのみが停止し、セッションを管理するデーモンは引き続き実行されます。これにより、セッションを失うことなくSSHサーバーを再起動できます。これは、誤って設定してサーバーを再起動できない場合に特に便利です。