외부에서 타겟 서버로의 직접적인 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 명령에서 직접적으로 포트 및 사용자 변수를 설정할 수 있어 더 유연한 설정이 가능하다!