SSH 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 문의 주세요
위와 관련된 리얼리눅스 강의로는 "네트워크 완전정복" 수업이 있습니다!