멀티 플랫폼 환경에서 ssh key 관리하기


Social coding의 시대에 맞춰서 대부분의 오픈 소스 프로젝트들과 소스컨트롤들이 git으로 가고 있는 현 추세에 맞춰서 ssh키 관리하는 글을 하나쓸까한다. 현재 필자는 윈도우 머신 2대, 맥, 리눅스와 호스팅서버, VPS 모두 사용해야하는 상황인데 그렇다고 해서 키를 시스템별로 다 새로 만들어서 사용하는 것은 아니기에 이렇게 가이드 문서를 하나 만든다.

먼저 ssh키를 하나 생성하도록 하자. ssh키는 자신의 이메일 주소당 하나 있다고 생각하는 것이 맞는 것 같다. 필자의 경우에는 개인용 프로젝트에 사용하는 이메일 계정에 맞는 키 1개 그리고 회사에서 일할 때 쓰는 키 1개 이렇게 2개로 운영하고 있다.

  1. 환경 전제

윈도우에서는 cygwin을 사용한다고 전제하자. 맥과 리눅스는 터미널을 사용한다고 하자.

  1. 키 생성하기

먼저 자신의 키를 하나 만들어야 한다. 새 환경 중 아무데서나 다음의 키를 이용해서 키를 하나 만든다.

ssh-keygen -t rsa -f mike3dk

이러면 passphrase를 물어보는데 비밀번호를 잘 넣어주면 된다.

그러면 자신의 홈디렉토리의 .ssh 디렉토리안에 다음의 2개의 파일이 만들어진것을 볼 수 있을 것이다.

~/.ssh/mike3dk

~/.ssh/mike3dk.pub

.pub파일은 자신의 퍼블릭키이고 그냥 파일은 자신의 프라이빗키이다. 공개키는 여기저기 막 놓아두어도 상관없지만 private키는 잘 간수하는 것이 좋겠다. Github나 다른 Git관련 솔루션에서 내 계정과 연결할 때 쓰는 공개키가 바로 mike3dk.pub 이 파일이다.

  1. 이 키를 이용해서 ssh 로그인해보기

이 키를 이용해서 다른 사이트에 로그인을 해보자.

ssh [email protected]

그러면 ssh 비밀번호를 물어보는데 그 키를 넣어주면 된다.

  1. 이제 비밀번호 없이 그 사이트에 로그인을 하는 법을 해보자.

크게 2가지 방법이 있는데 하나는..

cat .ssh/mike3dk.pub | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'

다른 하나는 ssh-copy-id 명령어를 사용하는 법이다.

ssh-copy-id -i ~/.ssh/mike3dk.pub [email protected]
  1. 이 키를 이용해서 다른 시스템에서 사용하기

방금 만든키를 이용해서 다른 환경에서 사용하기 위해서 먼저 이 키페어를 다른 시스템으로 복사를 한다.

scp ~/.ssh/mike3dk [email protected]:~/.ssh/
scp ~/.ssh/mike3dk.pub [email protected]:~/.ssh/

이 키를 이 시스템에서 쓰겠다고 하기 위해서는 먼저 ssh config파일을 만들어 줘야한다. 키가 설치가 안된 다른 환경으로 먼저 가서 config란 이름의 파일을 .ssh디렉토리 안에 만들고 다음의 내용을 추가해준다.

touch ~/.ssh/config
IdentityFile ~/.ssh/mike3dk
  1. ssh-agent 띄우기
eval `ssh-agent`
  1. key chain 사용하기

keychain은 자동으로 ssh-agent를 관리해주는 키 관리자이다.

맥에는 키체인이 GUI버전의 키체인이 기본으로 깔려있다.

대부분의 시스템에는 기본으로 설치되어있지는 않으니 일단 각 환경에서 설치하는 법을 적어보면

6.1 Ubuntu

  1. keychain package를 인스톨한다.
sudo apt-get install keychain
  1. keychain이 읽는 파일들을 만들어줘야 한다. 이를 위해 keychain을 한번 실행하도록 하자
[email protected] ~ $ keychain

KeyChain 2.6.8; http://www.gentoo.org/proj/en/keychain/
Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL

 * Initializing /home/mkang/.keychain/W10023-sh file...
 * Initializing /home/mkang/.keychain/W10023-csh file...
 * Initializing /home/mkang/.keychain/W10023-fish file...
 * Starting ssh-agent
  1. .bashrc 파일을 편집해서 다음의 2줄을 넣어준다.
/usr/bin/keychain ~/.ssh/mike3dk
source ~/.keychain/$HOSTNAME-sh

그러면 ssh-agent를 한번에만 로딩하면서 키들은 캐쉬되어서 패스워드 안 넣어도 되는 시스템이 된다.

  1. 현재 돌아가는 모든 ssh-agent를 죽일려면
keychain -k all

6.2 Cygiwn

  1. keychain을 인스톨 한다.

cygwin 설치할 때 쓰는 setup.exe을 실행시켜 보면 util 쪽에 keychain 이 있다. 이거 설치하도록 한다.

  1. 나머지는 위와 동일하다.