ssh ProxyCommand

ssh로 서버에 접근할 때 많은 회사들이 Gateway를 통해서만 접속이 가능하도록 제한한다. ssh의 ProxyCommand 설정을 이용하여 Gateway에 접속하는 과정을 줄여보자.

ssh key 추가

로컬 머신의 공개키(e.g. ~/.ssh/id_rsa.pub)를 Gateway서버와 접근하려는 서버의 ~/.ssh/authorized_keys 파일에 추가한다. ~/.ssh/authorized_keys 파일이 없으면 생성해서 추가한다. 단, 파일 퍼미션은 600으로 준다.

ssh config

로컬 머신에 ~/.ssh/config 파일에 아래와 같은 내용을 넣는다.

Host target.server
   User irteam
   ProxyCommand ssh [email protected] nc %h %p

Host *.dev.server
   User irteam
   ProxyCommand ssh [email protected] nc %h %p

  • Host : 특정 서버를 지정한다. ‘*‘로 이름패턴을 사용할 수도 있다.
  • User : 타겟서버에 로그인할 계정이름이다.
  • ProxyCommand : Gateway 서버 호스트명과 계정명을 사용한다.

다음과 같이 직접 접근하는 것처럼 사용할 수 있다.

$ ssh target.server # 타겟서버에 접속 (irteam 계정)
$ ssh [email protected] # 계정을 별도 지정 (irteamsu 계정)

netcat을 쓰지 않는 방법들

OpenSSH >= 5.4

OpenSSH 5.4 이상을 쓰는 경우 -W 옵션을 이용해서 SSH의 netcat mode를 쓸 수 있다.

Host target.server
   User irteam
   ProxyCommand ssh [email protected] -W "%h:%p"

netcat이 없을 경우

Gateway 서버에 netcat이 설치되어 있지 않은 경우에는 아래처럼 설정할 수 있다.

Host target.server
   User irteam
   ProxyCommand ssh [email protected] "/bin/bash -c 'exec 3<>/dev/tcp/%h/%p; cat <&3 & cat >&3;kill $!'"

업데이트:

댓글남기기