전체 장면은 다음과 같습니다.
- SSH 설치 apt-get 설치 SSH
- 새 사용자를 생성했습니다. (이 작업을 수행할 필요가 없다는 것을 알고 있습니다.)
- 새 사용자를 사용하여 SSH를 통해 시스템에 로그인
- 루트 로그인을 허용하도록 /etc/ssh/sshd_config를 수정하십시오.
- systemctl status ssh 명령을 실행하십시오.
- 서비스가 실행되고 있음을 보여줍니다.
- systemctl stop ssh 실행(서비스 cmd를 사용할 수 있다는 것을 알고 있습니다)
- 아직 SSH로 로그인되어 있어요! 이게 어떻게 작동하는지 모르겠어요
- 새 퍼티 인스턴스를 열고 연결을 시도했지만 서비스에 연결할 수 없거나 시간이 초과되었다고 표시됩니다.
- systemctl start ssh를 실행하고 새 퍼티 인스턴스를 사용하여 사용자로 로그인을 시도하면 성공합니다.
왜 첫 번째 인스턴스(ssh를 통해 로그인한 새 사용자)를 해제하지 않았는지 궁금합니다. 처음 로그인했을 때 ssh가 포트 22에서 연결을 수락하고 새 웹 소켓 포트(멀티 스레드)를 열고 해당 포트에 내 연결을 할당하고 포트 22에서 다른 연결을 수신하고 있었기 때문입니다. 연결 및 로그인할 때 서비스 중지 후 시간 초과라고 나오나요?
나는 ssh가 자신이 여는 임의의 포트를 추적하지 않을 것이라고 확신합니다. 이는 아마도 버그(깨진 것이 아님)라고 말할 수 있습니다. C 프로그램도 ssh를 추적하고 ssh 서비스가 중지되면 인스턴스를 삭제해야 하지 않나요? 어떤 아이디어가 있나요?
답변1
이는 의도적인 것입니다. SSH를 사용하여 시스템에 연결하면 대상 시스템의 데몬이 새 sshd
프로세스 또는 심지어 두 개의 프로세스(하나는 대상 사용자로 실행되고 root
다른 하나는 대상 사용자로 실행됨)를 생성합니다. SSH 세션은 원래 프로세스가 아닌 이 새로운 프로세스에 의해 처리됩니다. 맨페이지에서:
sshd
클라이언트의 연결을 수신합니다. 일반적으로 부팅 시 시작됩니다/etc/init.d/ssh
(또는/etc/init/ssh.conf
Upstart init 데몬을 사용하는 시스템에서는). 들어오는 각 연결에 대해 새 데몬을 생성합니다. 분기된 데몬은 키 교환, 암호화, 인증, 명령 실행 및 데이터 교환을 처리합니다.
서비스를 중지하면 기본 데몬만 중지되고 세션을 관리하는 데몬은 계속 실행됩니다. 이를 통해 세션 손실 없이 SSH 서버를 다시 시작할 수 있습니다. 이는 특히 잘못 구성하여 서버를 다시 시작할 수 없는 경우에 유용합니다.