SSH 키를 생성하고, ssh-agent 에서 사용하기

sshssh-keygenssh-agent

SSH (Secure Shell Protocol) 는 암호화 네트워크 프로토콜 입니다. 이 프로토콜을 사용하면 원격 서비스에 연결하고 인증할 수 있습니다. SSH 키를 사용하면 암호를 사용하지 않고, 연결할 수 있습니다.

SSH 키가 없는 경우 로컬에서 ssh-keygen 명령을 사용하여 새로운 키를 생성할 수 있습니다. 키를 생성한 후, 원격 서비스에 공개키를 등록하여 활성화 할 수 있습니다. 만약 여러개의 키와 원격 서비스를 사용하는 경우 별도의 설정을 통해 키와 원격 서비스를 대응 시킬 수 있습니다.

SSH 키는 생성할 때 암호를 추가하여, 키를 더욱 안전하게 보호할 수 있습니다. 이 키는 사용할 때 마다 암호를 입력해야 합니다. 키에 암호가 있고 사용할 때마다 암호를 입력하지 않고 싶은 경우 ssh-agent 에 키를 추가하여 사용합니다.

SSH 키 생성하기

ssh-keygen 명령을 사용하여 SSH 키를 생성합니다. 이 명령에서 주로 사용하는 옵션들은 다음과 같습니다.

NOTE

Github 에서 SSH 키 타입을 ed25519 로 생성하는 것을 추천합니다. RSA 타입을 사용하는 경우에는 키의 크기를 4096 을 사용하는 것을 추천하며, DSA 타입은 지원하지 않습니다.

터미널에서 ssh-keygen 명령을 실행합니다.

$ ssh-keygen -t rsa -C "your_email@example.com"

키를 저장하는 경로를 물어보는 프롬프트에서 생성하는 키의 위치를 변경할 수 있습니다. 엔터를 입력하면 기본값 $HOME/.ssh/id_rsa 으로 저장합니다. 만약 키가 이미 존재한다면, 덮어 쓸지 여부를 확인합니다.

  Enter file in which to save the key (\Users\admin\.ssh\id_rsa):

키의 비밀번호를 물어보는 프롬프트에서 암호를 설정할 수 있습니다. 엔터를 입력하면 암호가 없는 키를 생성합니다. 입력한 암호가 맞는지 확인하기 위해 한번 더 암호를 입력합니다.

  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:

ssh-agent 실행하기

실행 방법을 알아보기 전에, 동작 방식에 대해 살펴보겠습니다.

ssh-agent 명령을 실행하면, 두 개의 환경 변수를 출력합니다.

이 명령을 여러번 실행하는 경우, 같은 갯수의 프로세스를 생성합니다. 여러번 생성하지 않도록 주의가 필요합니다.

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-2K877hL8D46R/agent.29917; export SSH_AUTH_SOCK;
SSH_AGENT_PID=29917; export SSH_AGENT_PID; 
echo Agent pid 29917;

이 결과를 환경 변수에 반영하려면, `eval` 명령과 함께 실행합니다. `echo` 명령으로 설정 값을 확인할 수 있습니다.

$ eval "$(ssh-agent)" 
$ echo $SSH_AUTH_SOCK 
/tmp/ssh-2K877hL8D46R/agent.29917 
$ echo $SSH_AGENT_PID 
29917

kill 명령을 사용하여 프로세스를 종료할 수 있습니다.

$ kill -9 $SSH_AGENT_PID