재부팅시 SSH가 기본 포트로 재설정


12

/etc/ssh/sshd_config파일의 홈 서버에서 기본 SSH 포트 를 포트 54747으로 변경 한 다음 sshsshd서비스 를 다시 시작했습니다 . 구성을 테스트하기 위해 문제없이 로그 아웃했다가 다시 로그인했습니다.

며칠 후 적절한 업데이트를 설치 한 다음 서버를 재부팅했습니다. 포트 54747에서 SSH로 다시 접속을 시도 할 때 연결 거부 오류가 발생했습니다.

어떤 이유로 든 기본 포트에서 SSH를 시도했지만 작동했습니다! 나는 sshd_config를 확인하기 위해 되돌아 갔지만 여전히 커스텀 포트가 있습니다. 그래서 서비스 sshsshd서비스를 다시 시작한 후 "일반적인"동작 (포트 54747의 SSH)으로 돌아 왔습니다. 다시 재부팅을 시도했는데 연결이 다시 거부되었습니다 ...

아무도 내가 뭘 잘못했는지 알아?

추가 정보 :

  • 우분투 16.04.2 LTS
  • 서버는 TV에서 열린 세션 (SSH와 동일한 사용자)과 함께 HTPC에도 사용됩니다.
  • 랩톱의 RSA 키를 사용하여 SSH를 사용하고 비밀번호 인증을 비활성화했습니다.
  • 나는로 재부팅 sudo reboot -h now했지만 검색 후 일부 사람들이 낙담 한 것을 발견 했으므로 시도 sudo reboot했지만 차이는 없었습니다.

이벤트 순서 편집 :

  1. SSH 포트를 22에서 54747으로 변경 /etc/ssh/sshd_config
  2. ssh 및 sshd 서비스를 다시 시작하십시오.
  3. 현재 SSH 세션 종료
  4. 54747 포트에서 성공적으로 SSH 연결
  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 연결을 사용할 수 없습니다. ssh 서버에서 ps -ef | grep sshd는 / usr / sbin / sshd -D 프로세스를 리턴해야합니다. 여러 다른 사람들이 당신을 다른 방향으로 보내지 만 도와줍니다. 도움이된다면 메신저로 채팅 해 드리겠습니다.
jones0610

어쩌면 이미 동일한 사용자와의 세션이 열려 있고 Kodi로 TV에 표시 되었기 때문일 수 있습니다.
3rgo

안녕하세요, @ 3rgo,이 문제를 해결 했습니까?
pa4080

안녕하세요 ! 아니요이 문제가 계속 발생합니다 ... 운 좋게도 홈 서버를 너무 자주 재부팅 할 필요는 없지만 자동화 된 프로세스 중 일부를 중단하기 때문에 여전히 고통
스럽습니다

몇 가지 아이디어가 있습니다. (1) 포트를 기본값으로 변경 한 다음 전체 시스템을 다시 시작할 수 있습니다. 그런 다음 원하는 값으로 다시 변경하십시오. (2) 예를 들어 다른 값으로 시도하십시오 Port 10285. 구글은 54747에 대한 몇 가지 결과를 보여준다 ... 각 포트에 대해 두 개의 개별 지시문을 작성하십시오. Port 22및을 Port 54747두 번째 방화벽으로여십시오. (4) 시작 부분에있는 Match LocalPort지시문 을 시도 할 수 있습니다 sshd_c.
pa4080

답변:


2

ssh는 구성에 따라 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

그런 다음 ssh 데몬이 이전에 실행 중인지 sudo systemctl daemon-reload변경 사항에 대해 systemd에 알리십시오 sudo systemctl reload ssh.


이 답변은 매우 유망 해 보이지만 /etc/systemd/system/ssh.socket.d/port.conf무시되고 재부팅하면 여전히 포트가 22로 재설정됩니다. 파일 이름이 관련이 있습니까? Ubuntu의 시스템 재정의 대한 훌륭한 문서를 찾을 수 없습니다 .
MestreLion

로 끝나는 파일 이름은 중요하지 않습니다 .conf. 시스템 재정의 구성 파일에 대한 자세한 내용 은 systemd-system.conf (5) 를 참조하십시오.
Robie Basak

또한 systemctl status ssh.socket활성화되어 있고 듣고있는 것을 확인할 수 있습니다 .
Robie Basak

2
이 작동합니다! 마침내이 미스터리가 해결되었습니다! 그러나 나중에 포트를 사용하여 액세스 할 수 있음을 알았 습니다. 기본 22와 사용자 정의 포트. ListenStream=사용자 정의 포트 앞에 줄을 추가하면 문제가 발생하지 않습니다. 이 ListenStream=22설정을 기본값으로 "지 웁니다" /lib/systemd/system/ssh.socket? 설정을 무시하는 가장 좋은 방법. 아마도 대답에 이것을 추가 할 가치가 있습니까?
MestreLion

@MestreLion 아 예, 맞습니다. 답변을 업데이트하겠습니다. 감사!
Robie Basak

0

/etc/ssh/sshd_config파일 에서 포트 설정을 확인하십시오 . sudo 또는 sudo 그룹의 사용자로 편집하고 있는지 확인하십시오. 포트를 설정하기 위해해야 ​​할 것은 한 줄 유형입니다. Port 54747.이제, ssh 서비스를 다시 시작하여 다시 시작한 service sshd restart.다음 sudo netstat -lntp | grep ssh.재부팅 및 테스트 를 실행하여 ssh가 해당 포트에서 수신 대기 중인지 확인하십시오 .

네트워크 설정도 확인하십시오. 회사 네트워크에있는 경우 올바른 VLAN에 있는지 확인하십시오.


백업을 수행하고 파일을 sudo로 편집하고 기본 Port 22줄만 변경했습니다 Port 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 Server에도. 연결조차 중단되지 않았습니다. 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

ssh 서버 유형에서 sshd 데몬이 수신하는 포트 및 기타 유용한 정보를 보려면

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 서버 의 터미널 세션 (Atlas)에서 추가 작업을 수행하기 전에이를 분리하려면

ssh localhost

만약 이것이 실패한다면,

ssh -p 54747 localhost

이것이 작동하지 않으면 실행 중 얻은 결과를 확인합니다.

sudo service sshd status

안녕하세요 ! 더 잘 이해할 수 있도록 일련의 이벤트를 추가했습니다. ssh -p <PORT> <USER>@<IP>개인 키를 에이전트에 추가 한 상태 에서 명령을 사용하여 SSH를 실행 합니다.
3rgo

아주 좋아요 6a 단계 : sshd 서버에서 sudo service sshd status. 포트 22를보고하면 호출되는 가짜 sshd_config 파일이 있습니다.
jones0610

"비활성이 (죽은)"(두 번째 내 영업 이익 최대 출력 참조) 말한다
3rgo

따라서 죽었을 때 (활성화되어 실행 중이 아닌 경우) 생각하는 컴퓨터로 들어 가지 않습니다. 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.socket분명히 파일을 통해 포트를 변경하는 다른 방법이 있습니다 : https://www.vultr.com/docs/how-to-change-ssh-port-on-coreos
  2. sshd가 시작될 때 올바른 / etc / 또는 / etc / ssh가 아직 마운트되지 않았습니다. 나중에 부팅 프로세스에서 마운트되는 별도의 볼륨입니까?
  3. sshd가 부팅 할 때 구성 파일에 대한 읽기 권한이 부족하지만 sshd가 시작되는지 전혀 알지 못합니다.

2
나는 당신이 그것에 있다고 생각합니다. 그리고 많은 업그레이드를 거친 서버라면 아마도 시작 스크립트가 모여있을 수 있습니다 (sysv-init, upstart, systemd) / etc / find /etc/ -iname "*ssh*"에 있는 모든 파일 을 찾아서 더 많은 단서를 찾으십시오.
Bazz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.