본문 바로가기
e-Logbook

암호없이 SSH로그인 하기

by Thdnice 2013. 5. 7.
반응형

태양이님의 댓글에 따라 수정되었습니다. (2014/ 5/ 20)


RSA암호화 방식

  대부분의 현대의 공개키 암호와 방식은 수학적 '소수(Prime Number)'알고리즘을 사용한다. 소수란 자기자신과 1을 제외한 다른 어떤 약수도 가지지 않는 숫자를 의미하는데, 이러한 특징때문에 소수그 자체는 더 이상 소인수분해가 불가하다. 즉 60이라는 숫자는 3*4*5 이런식으로 소인수 분해가 가능하지만 123 이란 소수는 소인수분해가 되지 않는다.


  이러한 소수의 특징때문에 소수와 소수를 곱한 그 숫자를 소인수분해한다면 다시 그 자신들만 나오게 되는데, 이 때, 두 숫자를 곱해서 숫자를 얻는 것은 쉽지만, 이를 분해해서 다시 2개의 소수를 구하는 것은 상대적으로 까다롭다. 다음의 예를 들어보자


123 이라는 소수와  17이라는 소수를 곱하면 2091이라는 수가 나오게 된다. 이는 단순한 곱하기로 구할 수 있을만큼 값을 얻기가 쉽다. 그러나 역으로 

2,091이라는 숫자가 17*123으로 이루어져있음은 구하기 쉽지 않다. 만약 좀더 큰 숫자(예를들어 200자리 숫자)를 사용한다면 수인수분해를 하는데 어마어마한 시간이 걸릴 것이다. 


  이러한 원리를 응용한 암호화 방식을 RSA암호화방식이라고 하며, 여기서 만들어진 두 수의 곱은, 누군가 알게 되더라도 하나의 소수를 알지 못하면 다른 하나의 소수를 구하기 매우 어려우므로(불가능한것은 아니나, 현실적으론 불가능에 가깝다) 쉽게 공개가 가능하다(공개키), 이러한 공개키는 개인키를 가지고 있으면 복호/암호가 가능하게 되어있다. 




SSH의 로그인을 암호없이 하는 법

  SSH역시 이를 응용하여 공개키를 원하는 호스트 컴퓨터에 미리 복사해둠으로서, 일일이 타자를 치지 않고서 로그인을 할 수 있는 방법이 마련되어있다. 여기선 설명을 좀더 명확히 하기 위해서 로그인을 하려고 하는 서버/호스트를 A라고 하고, 자신이 제어중인 단말기/클라이언트를 B라고 하자.


  즉 B라는 컴퓨터를 이용해서 원격에 있는 A의 컴퓨터에 접속하고 싶은데 일일이 타이핑을 하는 과정이 번거로운 경우이다.



일단 B라는 컴퓨터의 키를 다음과 같이 만들 수 있다.

 ssh-keygen -t rsa


 키제네레이터를 이용하여 RSA방식으로 개인키-공개키를 만들겠다는 명령어이며, 이후 파일의 위치(기본 홈디렉토리의 .ssh) 와 키에 대한 암호를 지정할 수 있다. 이때 번거로움을 피하기 위해서 키를 만드는 중이므로 키에 대한 암호는 생략(그냥 엔터)를 치고 넘어간다.


 

  만들어진 키는 id_rsa 와 id_rsa.pub 두개의 키파일로 저장되는데 개인키(id_rsa)는 보안상 중요하므로 퍼미션을 600으로 (자신만 읽고 쓸 수 있도록) 지정되어있어야 하고, 공개키(id_rsa.pub)의 경우에는 말그대로 공개되어 사용될 수 있도로 644로  지정되어있어야 한다. (기본 설정이므로 딱히 건들 필요는 없다.)


  간단히 공개키(자물쇠)와 개인키(열쇠)는 두개가 한개의 쌍이므로, 이 자물쇠를 호스트컴퓨터인 A컴퓨터의 자신 계정에 달아주기만 하면된다. 그러면 번번히 SSH의 암호를 입력하지 않아도, 자동으로 열쇠를 자물쇠에 맞추어본후 맞다면(쌍이 일치한다면)로그인이 이루어지게 된다. 


  공개키를 호스트컴퓨터에 등록하는 방법도 쉽다. 호스트컴퓨터(A)의 홈계정 아래 .ssh란 디렉토리에 authorized_keys 란 파일을 만들고, 그 안에 공개키를 그대로 복사 붙여넣기 하면 된다.


  A의 컴퓨터에서 다음의 명령어로 이 과정을 진행할 수 있다.

scp username@ComputerB:~/.ssh/id_rsa.pub ~

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

rm ~/id_rsa.pub 


 첫번째 행은, B의 컴퓨터에서 공개키파일을 복사한다는 내용, 두번째 행은 공개키를 A컴퓨터에 등록하는 내용, 세번째 행은 공개키파일을 지우는 내용이다.


  만약 여러군데의 컴퓨터로부터 접속을 원한다면 authorized_keys에 계속해서 공개키를 연속으로 붙여넣으면 된다. 혹은 authorized_keys2 란 파일을 만들어도 된다.(단 3, 4, 이후는 인식하지 않는다)




한번에 해결하는 방법

  그러나 이마저도 귀찮다면 다음명령어를 통해서 한번에 서버컴퓨터의 authorized_keys에 공개키의 내용을 붙여넣을 수 있다. (B의 컴퓨터에서)


 cat ~/.ssh/id_dsa.pub | ssh 계정@A컴퓨터 "cat >>.ssh/authorized_keys"







반응형