SSH port 22: Connection refused 문제 해결법
scp 명령어나 ssh 명령어 실행 과정에서 "ssh: connect to host port 22: Connection refused" 오류가 발생할 수 있다. 원인과 해결법을 알아보자
scp 는 내부적으로 SSH 통신을 기반으로 동작되고
아래와 같은 SSH 접속 오류는 다양한 원인이 있을 수 있습니다.
ssh: connect to host port 22: Connection refused
(원인 1) 리눅스 서버에서 ssh 서버 실행이 안되고 있는 경우 입니다.
CentOS 접속하셔서 ssh 서버 프로그램이 실행중인지 아래처럼 확인하고
$ systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-11-27 12:28:52 KST; 2 days ago
Process: 16545 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
Main PID: 16554 (sshd)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/ssh.service
└─16554 /usr/sbin/sshd -D
Nov 30 11:36:21 q391-0865 sshd[4299]: Connection closed by invalid user sshadmin ...
만약 실행중이지 않다면 설치 여부를 확인해서 ssh 서버 프로그램을 설치하신후 scp 를 재시도 해보시기 바랍니다.
(원인 2) CentOS 리눅스 서버 내부의 SSH 서버 프로그램 Port 번호 설정이 22 번이 아닌 경우
$ sudo nano /etc/ssh/sshd_config
... (생략) ...
Port 22
위 처럼 Port 22 번 (기본 포트번호 설정)이 안되어 있거나 다른 포트 번호로 되어있다면 scp 명령어를 실행할때 아래 처럼 -P 옵션을 사용해서 포트번호를 따로 지정하셔야합니다. (예시: SSH 포트번호 1122 인 경우)
$ scp -P 1122 파일명 user@IP주소:경로명
그리고 현재 리눅스 서버 안에서 SSH 서버 프로그램이 어떤 포트 번호를 사용중인지 확인하려면 아래와 같이 확인도 가능합니다. (예시: 기본 포트번호 22번 사용중임을 확인 가능)
$ sudo netstat -tlnp | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 16554/sshd
(원인 3) 방화벽(Firewall) 차단으로 인한 접속 문제인 경우
예를 들어 방화벽 프로그램이 동작중인지 확인하고 간단한 방법으로는 아래와 같이 중단(disable) 시킬 수 있고 방화벽 설정을 통해서 SSH 포트번호 차단에 대한 규칙을 삭제 할 수 있습니다.
$ sudo ufw status
$ sudo ufw disable
$ sudo ufw delete deny 22
위는 방화벽 프로그램 ufw 의 경우이고 아래는 firewalld 경우의 예시 입니다.
$ systemctl status firewalld
$ systemctl disable firewalld
firewall-cmd 명령어 통해서 현재 설정을 확인하고 ssh 서비스 에 대해서 접속 허용을 아래와같이 할 수 있습니다.
$ sudo firewall-cmd --list-all
$ sudo firewall-cmd --permanent --add-service=ssh
$ sudo firewall-cmd --reload
또한 아래 처럼 리눅스 커널 netfilter 기반으로 동작하는 iptables 명령어 통해서 현재 22번 포트번호가 차단되어있는지 확인 할 수 있고 차단 되어있다면 아래 처럼 보일 수 있습니다.
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:ssh
이때 해당 SSH 포트번호(예: 22번)에 대해서 허용하고 싶다면 아래와 같은 명령어가 필요 할 수 있습니다.
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
(원인 4) 네트워크 통신 연결 자체가 안되는경우
$ ping "리눅스서버 IP 주소"
참고로 네트워크 통신은 가능해도 리눅스 서버에서 ICMP 패킷을 차단해놨다면 ping 의 response 응답이 안올 수있습니다. 예를 들어서 아래 처럼 google 웹 서버에 ping 을 전송한다면 정상적으로 ICMP 패킷 응답(response)을 받을 수 있지만 naver 웹서버 같은 경우는 ICMP 패킷을 보통 차단해두기 때문에 ICMP 패킷 응답(response)을 받을 수 없어서 네트워크 통신이 안된다고 오해 할 수있으니 주의가 필요합니다.
(1) ICMP 통신 정상 동작 예시
$ ping www.google.com
PING www.google.com (142.250.207.100) 56(84) bytes of data.
64 bytes from kix06s11-in-f4.1e100.net (142.250.207.100): icmp_seq=1 ttl=57 time=56.7 ms
(2) ICMP 통신 응답(response) 없는 경우
$ ping www.naver.com
PING www.naver.com.nheos.com (223.130.200.107) 56(84) bytes of data.
위 4가지 원인을 기준으로 확인 부탁 드리고 추가적으로 질문있으시다면
카카오톡 채널 "리얼리눅스" https://pf.kakao.com/_sxevPT
문의 주시면 감사하겠습니다.
위와 관련된 리얼리눅스 강의로는 "네트워크 완전정복" 수업이 있습니다!
https://reallinux.co.kr/course/se_network
https://www.youtube.com/watch?v=2cjKEtJNaGY
'리눅스 이야기' 카테고리의 다른 글
WSL 우분투 설치 실행 오류 "지정된 파일을 찾을 수 없습니다" (ERROR_FILE_NOT_FOUND) (1) | 2023.12.04 |
---|---|
리눅스 시스템 부하와 Load Average (2) | 2023.12.01 |
인터넷과 웹사이트는 어떻게 작동하나요? (3) | 2023.11.30 |
내가 코딩을 배운다면?? (IT직종의 전망, 취직 관련) (0) | 2023.11.28 |
Address already in use (Bind failed) 문제 해결방법 (1) | 2023.11.27 |