콘텐츠로 건너뛰기
Home » Blog » proxy jump를 통한 이중 ssh

proxy jump를 통한 이중 ssh

외부에서 타겟 서버로의 직접적인 SSH 접근이 불가능하고, 중간에 특정 경유지 서버를 거쳐야만 타겟 서버에 접근할 수 있는 상황이다.

즉, 두 번의 SSH 연결이 필요하다: 먼저 경유지 서버에 연결한 후, 그 서버를 통해 타겟 서버에 연결해야 한다.

이때, Private key를 로컬과 경유지 서버에 각각 배치하여 해결할 수도 있지만, 더 직관적이고 간편한 방법으로 ProxyJump를 사용할 수 있다.

외부에서 타겟 서버 (second)로 ssh 접근을 해야한다고 가정한다.

SSH config 파일 설정 (~/.ssh.config)

Host first
  HostName first-server.example.com
  User first-server-username
  Port first-server-port
  IdentityFile ~/.ssh/first.pem

Host second
  HostName second-server.example.com
  User second-server-username
  ProxyJump first >> 상단에 지정한 경유지 호스트명
  IdentityFile ~/.ssh/second.pem
  • 이를 통해 ssh first 명령으로 경유지 서버(first-server)에 접근할 수 있으며, ssh second 명령으로 타겟 서버(second-server)에 접근할 수 있다.

이를 jenkinsfile에 적용한다면 다음과 같다.

ssh -o ProxyCommand="ssh -W %h:%p -p ${first-server-port} ${first-server-username}@${first-server-uri}" -o StrictHostKeyChecking=no -p ${second-server-port} ${second-server-username}@${second-server-uri}
  • 기존에는 -J 태그를 써서 proxy-jump를 시도했으나, 포트 변수를 읽지 못하고 계속해서 22(default)로 접근하는 이슈로 ProxyCommand로 대체하였다.
    • ProxyCommand를 사용하면 SSH 명령에서 직접적으로 포트 및 사용자 변수를 설정할 수 있어 더 유연한 설정이 가능하다!