Could not connect to ‘host’ (port 22): Connection failed.
Xshell이나 PuTTY 등의 SSH 클라이언트에서 SSH 연결을 시도할 때 아래와 같이 메세지가 나올 때가 있습니다.
Connecting to 192.168.1.123:22... Could not connect to '192.168.1.123' (port 22): Connection failed. Type `help' to learn how to use Xshell prompt.
이는 서버에서 SSH 연결이 허용되지 않았을 때 발생하는 메세지입니다. SSH 클라이언트 마다 메세지가 다르게 나타날 수 있습니다.
SSH 접속을 위해서는 접속을 위한 클라이언트(Xshell)에서 연결을 시도하게 됩니다. 이 때 접속 대상 호스트에서 ‘SSH 연결’을 위한 준비가 되어있지 않을 경우 클라이언트에서 서버로 접속할 수 없습니다. SSH 접속을 위해 아래 두 가지 적용이 필요합니다.
- 대상 서버에서 22번 포트를 열기
- sshd 서비스가 구동되는지 확인
SSHD 서비스가 꺼져있을 경우
SSHD는 외부에서 SSH 프로토콜로 접속할 수 있도록 돕는 데몬입니다. 이 서비스가 서버에서 꺼져있다면 SSH 접속이 불가능해질 수 있으므로, 먼저 SSHD가 활성화되어 있는지 확인해 볼 필요가 있습니다.
먼저 ps -aef 프로세스 확인 명령을 사용하여 sshd가 현재 구동 중인지 확인할 수 있습니다. 아래 명령어로 어떠한 결과도 나오지 않는다면, 현재 sshd가 구동 중에 있지 않다는 의미입니다.
$ ps -aef | grep sshd
또는 아래와 같이 service sshd stauts 명령어 (또는 systemctl status sshd)로 현재 sshd 서비스의 자세한 상태를 파악할 수 있습니다. 아래와 같이 Active: inactive (dead) 로 되어있을 경우 sshd가 구동 중에 있지 않다는 의미입니다.
$ sudo service sshd status Redirecting to /bin/systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: inactive (dead) since 수 2018-06-06 16:23:11 KST; 8min ago Docs: man:sshd(8) man:sshd_config(5) Process: 1094 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 1094 (code=exited, status=0/SUCCESS) 6월 02 19:57:26 localhost.localdomain systemd[1]: Starting OpenSSH server d... 6월 02 19:57:26 localhost.localdomain sshd[1094]: Server listening on 0.0.0... 6월 02 19:57:26 localhost.localdomain sshd[1094]: Server listening on :: po... 6월 02 19:57:26 localhost.localdomain systemd[1]: Started OpenSSH server da... 6월 06 16:21:14 localhost.localdomain sshd[58974]: Accepted password for te... 6월 06 16:23:11 localhost.localdomain systemd[1]: Stopping OpenSSH server d... 6월 06 16:23:11 localhost.localdomain sshd[1094]: Received signal 15; termi... 6월 06 16:23:11 localhost.localdomain systemd[1]: Stopped OpenSSH server da... Hint: Some lines were ellipsized, use -l to show in full.
위 명령어를 통해 sshd가 죽어있다는 것이 확인되었다면 아래 명령어로 sshd 서비스를 재시작해보세요.
$ sudo service sshd start 또는 $ sudo systemctl start sshd
방화벽으로 인해 접속이 차단 된 경우
만약 SSHD가 정상적으로 켜져있음에도 연결이 되지 않는다면 현재 방화벽에서 22번 포트가 열려있지 않은지 확인해 볼 필요가 있습니다.
대부분의 리눅스는 iptables나 firewalld의 방화벽 프로그램을 사용하며, 우분투의 경우 ufw를 사용합니다. 이를 이용하여 22번 tcp 포트를 열어주셔야 합니다.
아래 방법으로 22번 포트를 열 수 있습니다. 이 과정은 root 권한으로 진행합니다.
iptables를 기준으로는 아래와 같습니다.
# iptables -A INPUT -p tcp -m tcp --dport=22 -j ACCEPT
firewalld는 아래와 같습니다.
# firewall-cmd --zone=public --add-port=22/tcp --permanent
마지막으로 ufw는 아래와 같습니다.
# ufw allow 22/tcp
위와 같이 방화벽을 열어주면 대부분 연결에 성공할 것입니다.
때때로 SSH 접속 포트를 변경해놓았을 가능성도 있으므로 이 경우에는 서버 관리자에게 문의해보아야 합니다.
SSH 서버가 아예 설치되지 않은 경우
원격 호스트에 SSH 서버가 설치되지 않았을 때에도 문제가 발생할 수 있습니다. 이 경우 역시 클라이언트가 알아차리지 못하므로 서버에서 확인해 볼 필요가 있습니다.
rpm을 이용하여 확인하였다면 아래와 같습니다.
$ rpm -qa openssh openssh-7.4p1-16.el7.x86_64
yum list (또는 dpkg -l | grep ssh)를 이용하여 확인하였다면 아래와 같습니다.
$ yum list openssh Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.kakao.com * extras: mirror.kakao.com * updates: mirror.kakao.com Installed Packages openssh.x86_64 7.4p1-16.el7 @anaconda
그런데 위와 같이 결과가 나오지 않는다면 해당 서버에 sshd가 설치되지 않을 가능성이 있습니다.
아래 명령어로 ssh 서버를 설치해야 합니다.
$ sudo yum install openssh-server 또는 $ sudo apt install openssh-server
Xshell로 ssh에 접속을 시도 하려고 합니다.
위 방법대로 하려고 하는데 명령어를 Xshell에 입력하면 접속이 안된다는 말이 계속 반복되는데
혹시 Xshell이 아니라 다른곳에 입력하는 건가요??
안녕하세요. 블로그에 찾아주셔서 감사드립니다.
Xshell의 경우 원격지에서 연결할 수 있도록 돕는 프로그램이기에 접속이 불가능한 것입니다.
아래 명령어들은 실제 서버의 터미널 환경에서 입력해야하므로, 따라서 실제 서버에 접속하지 못하면 위 에러가 해결되지 않습니다.
추가로 Xshell에서 세션(SSH, TELNET 등)에 접속하지 않은 상태에서는 SSH 명령어가 아닌 로컬 명령어만 지원됩니다. 로컬 셸에서 help 를 치면 관련 명령어가 보일 것입니다.
감사합니다.
윈도우 cmd 관리자 권한에서 ps -ef | grep sshd 라고 쳤는데 내부 또는 외부 명령, 실행할 수 있는 프로그램,. 또는 배치파일이 아니라고 하는데요 어떻게 접근해야 하나요 ….?
해당 명령어는 리눅스 명령어입니다. SSH가 활성화되어있는지는 접속으로 테스트해보거나 직접 서버에 접속해보셔야 합니다.