리눅스

Could not connect to ‘host’ (port 22): Connection failed. 해결

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번 포트가 열려있지 않은지 확인해 볼 필요가 있습니다.

대부분의 리눅스는 iptablesfirewalld의 방화벽 프로그램을 사용하며, 우분투의 경우 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

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

View Comments

  • Xshell로 ssh에 접속을 시도 하려고 합니다.
    위 방법대로 하려고 하는데 명령어를 Xshell에 입력하면 접속이 안된다는 말이 계속 반복되는데
    혹시 Xshell이 아니라 다른곳에 입력하는 건가요??

    • 안녕하세요. 블로그에 찾아주셔서 감사드립니다.
      Xshell의 경우 원격지에서 연결할 수 있도록 돕는 프로그램이기에 접속이 불가능한 것입니다.
      아래 명령어들은 실제 서버의 터미널 환경에서 입력해야하므로, 따라서 실제 서버에 접속하지 못하면 위 에러가 해결되지 않습니다.

      추가로 Xshell에서 세션(SSH, TELNET 등)에 접속하지 않은 상태에서는 SSH 명령어가 아닌 로컬 명령어만 지원됩니다. 로컬 셸에서 help 를 치면 관련 명령어가 보일 것입니다.
      감사합니다.

  • 윈도우 cmd 관리자 권한에서 ps -ef | grep sshd 라고 쳤는데 내부 또는 외부 명령, 실행할 수 있는 프로그램,. 또는 배치파일이 아니라고 하는데요 어떻게 접근해야 하나요 ....?

    • 해당 명령어는 리눅스 명령어입니다. SSH가 활성화되어있는지는 접속으로 테스트해보거나 직접 서버에 접속해보셔야 합니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

1개월 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

7개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

9개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

9개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

9개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

9개월 ago