SSH 에이전트는 SSH 공개키 인증을 사용하는 동안 SSH 키를 메모리에 저장하고 관리하는 도구이다. SSH 에이전트는 비밀번호 없이 여러 서버에 접속할 때 매우 유용하며, 에이전트 포워딩 기능을 통해 원격 서버에서도 에이전트에 저장된 SSH 키를 사용할 수 있게 해준다.

ssh-agent 시작하기

ssh-agent는 일반적으로 세션이 시작될 때 자동으로 실행되지만, 필요하다면 수동으로도 실행할 수 있다. 다음 명령어로 ssh-agent를 실행할 수 있다:

eval "$(ssh-agent -s)"

위 명령어는 ssh-agent를 백그라운드에서 실행하고, 환경 변수를 설정하여 에이전트와 통신할 수 있도록 한다.

SSH 키 추가

ssh-agent에 SSH 키를 추가하려면 ssh-add 명령어를 사용한다. 일반적으로 SSH 키는 ~/.ssh/id_rsa에 저장되며, 해당 키를 에이전트에 추가하려면 다음과 같이 명령어를 입력한다:

ssh-add ~/.ssh/id_rsa

여기서, ~/.ssh/id_rsa는 개인 키 경로를 나타낸다. 다른 경로에 키가 저장되어 있을 경우 해당 경로를 명시해야 한다.

키를 추가할 때 비밀번호가 걸려 있다면, ssh-add는 해당 비밀번호를 입력받고, 비밀번호를 메모리에 저장하여 이후 서버 접속 시 이를 자동으로 사용한다.

SSH 에이전트 포워딩

SSH 에이전트 포워딩은 클라이언트에서 원격 서버로 접속할 때, 원격 서버에서 다시 다른 서버로 접속해야 하는 경우 유용하다. 예를 들어, A 서버에서 B 서버로 SSH 접속을 시도할 때 B 서버에서도 A 서버에 저장된 SSH 키를 사용할 수 있다.

에이전트 포워딩을 활성화하려면 -A 옵션을 사용하여 SSH 접속을 시도한다:

ssh -A username@server

이 명령어는 원격 서버로 접속한 후에도 ssh-agent에 저장된 키를 사용할 수 있게 해준다.

SSH 키 목록 확인 및 제거

ssh-agent에 현재 추가된 키의 목록을 확인하려면 ssh-add -l 명령어를 사용한다. 이는 SSH 에이전트에 로드된 모든 공개키의 지문을 보여준다.

ssh-add -l

결과는 아래와 같이 표시될 수 있다:

2048 SHA256:xxxxxx... user@hostname (RSA)

여기서 2048은 키의 길이, SHA256:xxxxxx...는 키의 해시, user@hostname은 키의 주체 정보이다.

키를 에이전트에서 제거하려면 -d 옵션을 사용하여 특정 키를 제거하거나, -D 옵션을 사용하여 모든 키를 제거할 수 있다.

특정 키를 제거하려면 다음 명령어를 사용한다:

ssh-add -d ~/.ssh/id_rsa

모든 키를 제거하려면:

ssh-add -D

자동 SSH 에이전트 시작

매번 세션을 열 때마다 수동으로 ssh-agent를 실행하는 것은 번거로울 수 있다. 따라서 .bashrc 또는 .zshrc와 같은 쉘 초기화 파일에 ssh-agent를 자동으로 실행하도록 설정할 수 있다. 이를 위해서는 아래와 같은 코드를 초기화 파일에 추가한다.

if ! pgrep -u "$USER" ssh-agent > /dev/null; then
    eval "$(ssh-agent -s)"
fi

이 설정은 ssh-agent가 이미 실행 중인지 확인한 후, 실행 중이지 않을 경우에만 ssh-agent를 시작한다.