ssh 먹통된 경우 종료 하는 방법

ssh 사용 중 network 문제라던가 입력이 아무 말도 듣지 않는 경우가 발생할 때가 있다. 이 때 ctrl + D, ctrol + Z, ctrl + C가 다 듣질 않는다.

쉘을 하나 더 띄워 kill -9 명령으로 ssh 프로세스를 종료할 수도 있지만, 간단하게 종료시키는 방법이 있어서 소개한다.

ssh client가 지원하는 이스케이프 시퀀스가 몇 개가 있는데, 그 중에 하나가 terminate session이다. 이는 Enter, ~, .(마침표) 를 연달아 누르면 된다.

Enter, ~, ? 를 입력하면 사용할 수 있는 커맨드를 나열해준다.

Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

HTTP proxy를 통한 ssh 연결 방법

뜻이 있는 곳에 길이 있다고.. proxy에 막혀 아무것도 할 수 없는 상황에서 http proxy를 통해서 외부로 연결할 수 있는 방법이 있다는 것을 알았다.

사용할 수 있는 기본 환경은 이렇다.

  1. 22번 포트가 막혀있다. (아마 다른 대부분의 포트가 막혀있다.)
  2. Browser에 http proxy 설정을 해야 web 서핑을 할 수 있다.
  3. 리눅스를 쓴다.

서버 설정

서버 설정은 별다른게 없다. sshd를 22번으로 열어놔도 괜찮고, 혹시 22번 포트 검사를 할까 싶으면 443번 포트로 sshd를 열어둔다. (https로 속아줄지도 모르니까..) 또는 공유기에서 443 -> 22로 포트포워딩을 추가해도 된다.

특정 장소에서

리눅스에서 필요한 패키지를 설치한다.

$ sudo apt-get install corkscrew

그리고 ~/.ssh/config 파일에 다음과 같은 라인을 추가해준다.

host my.host.com
	ProxyCommand /usr/bin/corkscrew proxy.server.com [proxy_port] %h %p

이렇게 설정한 후에 ssh my.host.com 이라고 입력하면 22번 포트로 my.host.com에 연결이 된다. (my.host.com에 연결할 때만 이렇게 proxy를 사용한다.) 혹시 443번 포트로 변경을 했다면 ssh my.host.com -p 443 이라고 입력하면 된다.

ssh 연결이 되었으니 -D 옵션을 사용하여 포트 포워딩은 덤으로 할 수 있다. 이제 특정 장소의 방화벽을 우회하여 어디든 접속할 수 있다. 🙂