에이전트 포워딩의 개념

SSH 에이전트 포워딩(Agent Forwarding)은 원격 서버에 접속할 때, 로컬 시스템의 SSH 에이전트를 이용하여 원격 서버에서 다시 다른 서버로 SSH 접속을 할 수 있게 해주는 기능이다. 이 기능을 사용하면 SSH 프라이빗 키를 원격 서버에 저장하지 않고도 여러 서버에 안전하게 접속할 수 있다.

에이전트 포워딩의 주된 목적은 SSH 키를 여러 서버로 전송하지 않고도, 프라이빗 키를 안전하게 로컬 머신에서만 보관하면서 여러 계층의 서버에 연결할 수 있도록 하는 것이다. 일반적인 SSH 연결 흐름에서 SSH 에이전트 포워딩을 사용하면, 원격 서버는 로컬 머신의 SSH 에이전트에 접근하여 로컬 머신에 있는 키로 인증을 수행한다.

사용 예시: 다단계 SSH 접속

에이전트 포워딩의 대표적인 사용 예시로는 다단계 SSH 접속이 있다. 예를 들어, 로컬 머신에서 중간 게이트웨이 서버(A)에 접속한 후, A 서버에서 또 다른 서버(B)에 접속해야 하는 경우를 생각해 봅시다.

에이전트 포워딩을 설정하지 않은 경우, B 서버에 접속하려면 A 서버에 프라이빗 키를 직접 저장하거나, 비밀번호 기반 인증을 사용해야 한다. 이는 보안상 좋지 않은 선택이다.

하지만 에이전트 포워딩을 설정하면, 로컬 머신의 SSH 에이전트가 A 서버에 포워딩되고, A 서버에서 B 서버로 접속할 때 A 서버는 로컬 머신의 SSH 에이전트를 통해 인증을 수행하게 된다. 따라서 프라이빗 키를 A 서버에 복사할 필요가 없고, 키는 항상 로컬 머신에만 보관된다.

SSH 에이전트 포워딩 설정

에이전트 포워딩을 설정하려면 SSH 접속 시 -A 옵션을 사용하거나, SSH 설정 파일에 다음과 같이 명시하면 된다:

ssh -A user@gateway_server

또는 ~/.ssh/config 파일에 다음과 같이 설정할 수 있다:

Host gateway_server
  ForwardAgent yes

이렇게 하면 로컬 머신의 SSH 에이전트가 포워딩되어 게이트웨이 서버를 통해 다른 서버에 접속할 수 있다.

에이전트 포워딩의 내부 동작

에이전트 포워딩이 동작할 때, 로컬 머신의 SSH 에이전트는 TCP 소켓을 통해 원격 서버와 통신한다. 이때 SSH 프로토콜은 SSH_AUTH_SOCK라는 환경 변수를 사용하여 에이전트가 열려 있는 소켓을 참조한다.

원격 서버는 이 소켓을 통해 로컬 머신의 에이전트와 통신하며, SSH 키를 요청하고, 인증을 수행한다. SSH 에이전트 포워딩은 기본적으로 로컬 머신에 있는 키를 원격 서버가 직접 확인하지 못하도록 하는 장치이다. 실제 키는 로컬 머신에서만 유지되고, 원격 서버는 로컬 머신에서만 사용할 수 있는 소켓을 통해 인증 요청을 보내는 것이다.

에이전트 포워딩 사용 사례

1. 다단계 SSH 서버 접속 시 보안 유지

에이전트 포워딩의 가장 일반적인 사용 사례는 다단계 서버에 SSH 접속할 때 보안을 유지하는 것이다. 예를 들어, 관리자는 로컬 시스템에서 게이트웨이 서버(A)를 통해 여러 내부 서버(B, C, D 등)에 접근해야 할 수 있다. 에이전트 포워딩을 사용하면 각 서버에 프라이빗 키를 복사할 필요 없이, 로컬 머신의 SSH 에이전트를 통해 안전하게 인증을 수행할 수 있다.

이와 같은 상황에서, 로컬 머신에서 에이전트 포워딩을 사용하여 A 서버에 접속한 후, A 서버에서 B 서버에 접속할 때에도 로컬 머신의 SSH 에이전트를 사용하여 B 서버에 연결할 수 있다.

2. Git 리포지토리 접근

SSH 에이전트 포워딩은 Git 리포지토리에 접속할 때도 유용하게 사용된다. 예를 들어, 원격 서버에서 로컬에 있는 SSH 키로 Git 서버에 접근해야 할 경우가 있다. 이때 에이전트 포워딩을 사용하면, 원격 서버에 SSH 키를 저장하지 않고도 로컬 머신의 키를 이용하여 Git 리포지토리에 안전하게 접근할 수 있다.

3. 클라우드 환경에서 다중 서버 관리

클라우드 환경에서 여러 서버를 관리할 때, SSH 에이전트 포워딩을 사용하면 각 서버에 별도의 인증 설정을 할 필요 없이, 로컬 머신의 SSH 에이전트를 이용하여 안전하게 여러 서버를 관리할 수 있다. 특히 AWS, GCP와 같은 클라우드 환경에서는 다수의 인스턴스에 SSH 접속을 해야 하는 경우가 많기 때문에, 에이전트 포워딩을 통해 보안을 강화하고 관리의 편리성을 확보할 수 있다.

에이전트 포워딩의 보안 고려 사항

에이전트 포워딩은 편리하지만, 보안적으로 주의해야 할 점이 있다. 에이전트 포워딩이 활성화된 상태에서 원격 서버(A)에 접속하면, 그 서버에서 다른 서버(B)로 접속할 때 로컬 머신의 SSH 에이전트를 통해 인증이 이루어진다. 만약 A 서버가 손상되었거나 악의적인 사용자가 A 서버에 접근할 수 있다면, 해당 사용자가 B 서버로의 접속 권한을 부당하게 사용할 수 있다.

따라서, 에이전트 포워딩을 사용할 때는 신뢰할 수 있는 서버에서만 사용해야 한다. 또한, 특정 서버에서 에이전트 포워딩을 차단하려면, SSH 설정 파일에서 ForwardAgent 옵션을 no로 설정할 수 있다:

Host untrusted_server
  ForwardAgent no

이 설정을 통해, 의심스러운 서버에서 에이전트 포워딩을 차단할 수 있다.