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 접속을 위해 아래 두 가지 적용이 필요합니다.
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 서버가 설치되지 않았을 때에도 문제가 발생할 수 있습니다. 이 경우 역시 클라이언트가 알아차리지 못하므로 서버에서 확인해 볼 필요가 있습니다.
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
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…
View Comments
Xshell로 ssh에 접속을 시도 하려고 합니다.
위 방법대로 하려고 하는데 명령어를 Xshell에 입력하면 접속이 안된다는 말이 계속 반복되는데
혹시 Xshell이 아니라 다른곳에 입력하는 건가요??
안녕하세요. 블로그에 찾아주셔서 감사드립니다.
Xshell의 경우 원격지에서 연결할 수 있도록 돕는 프로그램이기에 접속이 불가능한 것입니다.
아래 명령어들은 실제 서버의 터미널 환경에서 입력해야하므로, 따라서 실제 서버에 접속하지 못하면 위 에러가 해결되지 않습니다.
추가로 Xshell에서 세션(SSH, TELNET 등)에 접속하지 않은 상태에서는 SSH 명령어가 아닌 로컬 명령어만 지원됩니다. 로컬 셸에서 help 를 치면 관련 명령어가 보일 것입니다.
감사합니다.
윈도우 cmd 관리자 권한에서 ps -ef | grep sshd 라고 쳤는데 내부 또는 외부 명령, 실행할 수 있는 프로그램,. 또는 배치파일이 아니라고 하는데요 어떻게 접근해야 하나요 ....?
해당 명령어는 리눅스 명령어입니다. SSH가 활성화되어있는지는 접속으로 테스트해보거나 직접 서버에 접속해보셔야 합니다.