본문 바로가기

Memo

간편한 RSA 인증

저는 서버에 접속할때 그동안 항상 아이디와 비밀번호를 치고 들어갔습니다.

그러던 어느날 overthewire.org의 워게임을 해보면서 RSA키 인증을 알게되었습니다.

예전에 RSA라 하면 공개키, 비밀키 이런 말을 주서들은것이 있는데요. 이것은 밑에서 알아보고

우선 키만드는 방법부터 보겠습니다.


username@host ~$ ssh-keygen -t rsa

쉘에 ssh-keygen -t rsa를 입력해주시면

Generating public/private rsa key pair.

공개/비밀 rsa키를 만든다캅니다.

그렇다면 저 rsa대신에 dsa 라고치면 Generating public/private dsa key pair. 이런식으로 나오겠죠.

여기선 RSA를 쓸것이기에 이부분은 스킵합니다.

다음으로 비밀키가 만들어질 경로를 물어봅니다.

Enter file in which to save the key (/home/username/.ssh/id_rsa): 

그냥 엔터하시면 기본으로 저곳에 만들어집니다.

Enter passphrase (empty for no passphrase):

여기선 만들 키에대한 암호를입력받습니다. 매번 인증할때마다 이 암호가 필요하게됩니다.

Enter same passphrase again: 재입력

설명대로 비워두시고 엔터하시면 암호없는 키가 만들어집니다.

보안상 비밀키가 유출되면 안좋겠지만 제목대로 간편하게 만들고자 놔둡니다.

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.

비밀키와 공개키가 다음 경로에 만들어졌습니다.

The key fingerprint is:

다음으로 이건 키지문이라 카는데 요건 만들때마다 달라지는것같습니다.

09:7f:3a:5c:33:23:56:fe:da:2b:de:ad:be:ff:e3:02 username@host
The key's randomart image is:

이미지도 챙겨주네요


이제 만들어진 경로에 들어가봅시다.
username@host ~$ cd .ssh

username@host ~/.ssh$ ls
id_rsa  id_rsa.pub  known_hosts

known_host에는 ssh 접속할때 저장한 호스트들이 있겠네요.

여기서 우리가 볼파일들은 아까 만들어두었던 rsa 공개키/비밀키 파일들입니다.


먼저 공개키부터 확인해봅시다.

username@host ~/.ssh$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTp2V3VXh+6LX6qQVVVjmcPw+lr8OchHB1Rp40Cc70rNcXlvHACGgpVjp03r8KX8eOs7giJoD+IjqDVPYfbLdFR5FIBG1E75d3ZyR+rF/MBkYPv7318wQ+1H61OeCNY44SV/wDAlYUxa3khqMKMs+6c4uIA3Zt2Uc+4C1PR9l8M2rNfpHZKBC0luamDVQiH1B+Li62TpZ2VF8dJoMEw8dz2pNgpbThITP+o9b+npUldirNNtnQfWRhM7WdROOG31qI0JGGx1ME3cDHW7Wb7g6MnwmxahJHdsKyI/+WXmf5hyTTI1udUO247P6DPcDggWc7/En4aQh+MijQC8+BxNZ7 username@host

끝에 유저명@도메인 이런식으로 붙은걸 확인할수있습니다. 접속할 서버에따라 저걸 수정하시면 됩니다.

이제 저 공개키를 접속하고싶은 서버에 올려주시면 그서버에 비밀키를 아는 사람은 모두 접속할수있습니다.

username@host ~/.ssh$ mv id_rsa.pub authorized_keys

마지막으로 공개키는 다음과 같은 파일명으로 바꿔주셔야합니다.

접속할 유저의 홈디렉토리/.ssh/authorized_keys 이렇게 있어야되는거죠.

접속 대상 서버에 바로 올리고싶다면 아래 명령을 한줄 입력하시면 됩니다.

scp ~/.ssh/id_rsa.pub id(같다면 생략가능)@host or ip:.ssh/authorized_keys


이제 비밀키를 확인해볼시간입니다.

username@host ~/.ssh$ cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA06dld1V4fui1+qkFVVY5nD8Ppa/DnIRwdUaeNAnO9KzXF5bx

...
dskfasgefuuwaiefh4rBlaBlaswalaswala83rhdsjhfu30hgegh3tth3iefEEATEew33rje

...
7dlTkgRwHrVhw9fgYJAHYyLvuym+bk97451PUfG10iNONKlMOTvIXDA=
-----END RSA PRIVATE KEY-----

블라블라쏼라쏼라하는 요상하게 길다란 키가 한뼘정도 나왔네요.

이 키를 가지고 있으면 위에서 말한 공개키가 업로드되있는 서버에 접속하실수 있습니다.

키암호도 안만들어 놨으니 요건 절때 유출되면 안되겠지요 :{P


이제 시험삼아 저 키를 이용해서 접속해봅시다.

(비밀키의 권한은 반드시 600으로 되어있어야합니다.)

-rw-------  1 username  username  1679 Sep 21 03:06 id_rsa


username@host ~/.ssh$ ssh -i id_rsa localhost

ssh -i 퍼미션600비밀키파일 접속할유저(같다면 생략가능)@hostname(or ip)


이제 곧바로 로그인이 되어있는 좋은 결과를 보실 수 있습니다.

username@host ~$ w
 04:44:44 up 294123 days, 04:44,  2 users,  load average: 0.01, 0.02, 0.05
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
user     pts/0    x.x.x.x  02:22    0.00s  0.44s  0.04s ssh -i id_rsa localhost
user     pts/1    localhost        09:14    0.00s  0.44s  0.00s w


이제 저 비밀키를 복사해서 windows에서 접속해보겠습니다.

아주둏은 클라이언트, Xshell을 이용하면

로그인할때 다음과 같이 키를 통한 로그인을 지원합니다.

찾아보기를 통해 키파일을 가져옵시다.

메모장열어서 비밀키를 복사하고 저장해두신 파일을 가져오시면됩니다.


여시면 xshell이 키를 잘인식한것을 볼수있습니다.


암호는 만들지 않았으니 비워두시고

이제 그대로 로그인하시면

마찬가지로 바로 로그인이 됩니다


이제 리눅스에서 alias를 이용하여 더편하게 로그인해봅시다.

sh-3.1$ alias helloworld="ssh -i ~/.ssh/id_rsa userid@host or ip
sh-3.1$ helloworld
Last login: Sat Sep 22 10:52:01 2012 from x.x.x.x


헿헿 간단합니다.

alias 명령은 유용하니 자세히 알아보실려면 http://gmyou.tistory.com/56 이곳을 참고해보세요 :)


ps : 위 공개키를 서버에 올려주시고 아이피와 올린 유저명좀 써주시면 감사드립니닯..<-퍽!