Linux SSH Login without Password

Linux 서버를 운용하다 보면, SSH 로그인을 패스워드 없이 구성해야 하는 경우가 종종 있다. Oracle RAC 구성을 위해 Node 서버 간 Oracle 운영 계정에 대해 패스워드 없이 접속 가능하도록 구현하거나, 특정 XML을 서버에 올리고 내리는 작업을 자동화 하기 위해 패스워드 인증 단계 없이 구성하는 경우가 있다. 이 경우, 정확한 구성 방법과 원리를 이해한다면 기계적으로 구성하면서 놓치는 부분이나, 실수를 줄일 수 있을 것으로 생각된다.

그 전에, 간단히 역사 공부를 하자면,
1976년 Whitfield Diffe와 Martin Hellman은 공개 키 암호 알고리즘을 만들었다. 그 후, Linux 서버 및 전자 상거래 인증서 등에 많이 사용되는 RSA키는 1978년 로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)의 연구에 의해 체계화되었으며, RSA라는 이름은 이들 3명의 이름 앞글자를 딴 것이다. 이들은 다수의 시도와 여러 알고리즘을 테스트 한 끝에 Scientific American 1978년 8월호에 그 결과를 내놓게 된다.

공개키와 개인키를 이용한 암호화 작동원리는 다음과 같다. 기본적으로 공개키는 누구나 가질 수 있는 키이고, 개인키(혹인 비밀키)는 자기 자신이 갖고 있는 키이다. A라는 사람이 B라는 사람의 공개키로 메시지를 암호화하여 B에게 보내면, B만 가지고있는 개인키로 이를 복호화 할 수 있다. 이 과정에서 A라는 사람이 자신의 개인키로 서명을 한다면, B가 메시지를 받았을 때, A라는 사람의 공개키로 그 서명도 같이 확인 할 수 있는 원리이다. 수학적으로는 매우 큰 정수를 소인수 분해하기 어렵다는 접근에서 계산 원리가 만들어졌다. 이 때문인지 아주 큰 소수(1과 자기 자신으로 밖에 나누어지지 않는 수)를 구할 수 있다면 돈이 되는 얘기도 있었다.

SSH로그인 과정에서는 이러한 공개키 방식을 이용하여 별도의 패스워드 없이 키 인증만으로도 로그인을 할 수 있는 기능이 있다. 그리고 그 구성 방법은 아래와 같다.

- 테스트 환경 -
접속을 시도하는 서버 : 10.0.0.11
접속을 시도하는 계정 : appdev
접속을 대상 서버 : 10.0.0.12
접속 대상 계정 : appprd

appdev 계정에서 10.0.0.12 서버의 appprd 계정으로 Script를 짜서 파일을 업로드 하기 위한 시나리오라고 보면 된다.


ssh-kegen 이라는 명령어로 rsa 타입의 공개키와 개인키를 생성하는 과정이다. ~/.ssh/ 두개의 파일이 생성된 것을 확인 할 수 있으며, 이 중 id_rsa.pub 파일이 바로 공개이다.



키 생성 후, 패스워드 없이 로그인 하고자 하는 10.0.0.2 서버로 자신의 공개키(당연히 오픈되지 말아야 할 개인키가 아니라!)를 미리 올려두는 작업을 해야한다. appprd 계정의 ~/.ssh/authorized_keys로 id_rsa.pub 파일의 내용을 그대로 복사하면 되는데, Linux에서는 이에 맞는 적절한 명령어인 ssh-copy-id 를 제공하기 때문에 이를 통해 키를 넘기면 편리하다.



실제로 대상 서버의 appprd 계정에 접속 해 보면 ~/.ssh 및 authorized_keys 파일이 생성된 것을 확인 할 수 있다. 여기서 중요한 점은 authorized_keys 파일은 반드시 Group/Other 계정에 Write 권한이 없어야 한다. 가능하면 600 권한을 주는 것을 권장한다. 

DESCRIPTION
       ssh-copy-id  is  a  script  that  uses ssh to log into a remote machine (presumably using a login
       password, so password authentication should be enabled, unless you’ve done  some  clever  use  of
       multiple  identities)  It  also  changes  the  permissions of the remote user’s home, ~/.ssh, and
       ~/.ssh/authorized_keys to remove group writability (which would otherwise prevent you  from  log-
       ging in, if the remote sshd has StrictModes set in its configuration).  If the -i option is given
       then the identity file (defaults to ~/.ssh/id_rsa.pub) is used, regardless of whether  there  are
       any  keys  in  your ssh-agent.  Otherwise, if this:       ssh-add -L provides any output, it uses
       that in preference to the identity file.  If the -i option is used, or the  ssh-add  produced  no
       output, then it uses the contents of the identity file.  Once it has one or more fingerprints (by
       whatever means) it uses ssh to append them to ~/.ssh/authorized_keys on the remote machine  (cre-
       ating the file, and directory, if necessary)

ssh-copy-id의 man 페이지 발췌

사실, ssh-copy-id를 사용하길 권장하는 이유도, 해당 명령어로 그룹의 Write 권한을 빼 주는 작업을 같이 해 주기 때문이다.



어쨌든 자신의 공개키가 업로드되면, 패스워드 없이 키 인증만으로도 해당 서버로 바로 접속이 가능하다. 만들어진 공개키와 개인키는 ssh-keygen으로 업데이트하지 않는다면 서버 계정에 존재하는 패스워드와 상관없이 사용 가능하다. 문제가 있을 경우, 다시 키를 만들어 올려주면 된다.

댓글

이 블로그의 인기 게시물

Windows Packet Monitoring by SmartSniff (smsniff)

Starting Xperf by Windows Performance Tools (WPT)

Installing IPMI Tool for Linux Server