메뉴 건너뛰기

Hodol's Blog

암호 입력 없이 SSH 소켓 통신하기

 
여는 말
SSH는 암호화된 통신 프로토콜로 보안이 중요한 현대의 인터넷 환경에서 가장 널리 쓰이는 프로토콜이다. 보안이 강조된 프로토콜이므로 암호 입력 없이 사용하는 것은 꽤 민감한 사안이지만, 작업의 특성상 SSH 접속을 자주 해야하거나 많은 서버에 SSH 접속을 해야하는 경우, 암호를 일일히 입력해야 한다면 생산성이 저하될 수 있다. 또, 자동화 프로그램에 SSH 통신이 포함되어 있는 경우에 사람이 일일히 암호를 입력해야 한다면, 더 이상 '자동화' 프로그램이 아니다. 또한, 암호를 입력하는 걸 누군가 어깨 넘어 슬쩍 훔쳐볼거 같은데 대놓고 말을 못하는 애매모호하고도 불편한 상황이라면 차라리 암호 입력을 생략하는 편이 낫다. 이러한 이유들로 암호 입력 과정을 생략할 필요성이 있으며, 다행히 그 방법이 존재한다. 강조하건데, 아래에 설명할 내용을 실상황에 적용할 때에는 보안에 좀 더 주의를 기울이도록 하자.
설정하기
상황 가정
몇몇 포스팅들을 보았는데 서버와 클라이언트가 모호하게 설명된 경우가 많다. 따라서 설명하기에 앞서 SSH 접속 상황을 다음과 같이 가정하고자 한다:
사용자는 자신의 방에 있는 client라는 이름의 컴퓨터 앞에 앉아서 멀리 떨어져 있는 server라는 이름의 컴퓨터에 원격으로 SSH 접속을 한다고 가정하자.
설정하기
client컴퓨터에서 다음과 같이 명령어를 입력하자.
[username@client ~]$ cd ~/.ssh
[username@client .ssh]$ ssh-keygen -t rsa
Enter file in which to save the key(/home/username/.ssh/id_rsa): [enter 입력]
Enter passphrase (empty for no passphrase): [enter 입력]
Enter same passphrase again: [enter 입력]
첫 줄은 SSH 키 정보 파일들이 저장될 디렉토리로 이동하는 명령이다. 두번째 줄에서 ssh-keygen 명령으로 필요한 파일을 생성하게 되는데 첫번째 질문은 RSA 방식 암호의 개인키가 저장될 파일 이름을 묻는 것이며 아무것도 입력하지 않으면 미리 정해진 id_rsa가 파일명으로 사용된다. 두번째 질문은 이 명령으로 생성되는 키들을 사용하는 통신을 할 경우, 통신을 시작할 암호를 입력하는 부분이다. 우리는 암호 입력을 하지 않을 것이므로 아무것도 입력치 않고 enter만 치면 된다. 세번째 질문은 암호를 다시 확인하는 과정이며 역시 enter만 입력하자. 이 과정을 마치면 id_rsa 파일과 id_rsa.pub파일이 생성된다. id_rsa파일은 개인키 정보가 저장된 파일로 사용자 외에 타인이 보아서 좋을게 없다. 따라서 id_rsa파일의 퍼미션이 600인지 확인하고 아니라면 퍼미션을 600으로 설정하도록 하자. id_rsa.pub파일은 공개키 정보가 저장된 파일로 누구나 접근하여도 상관이 없다. 이 id_rsa.pub 파일의 내용을 다음과 같이, 원격의 server 컴퓨터에 복사하도록 하자.
[username@client .ssh]$ ssh-copy-id -i id_rsa.pub -p 포트번호 계정@(server의 주소)
또는 server계정의 홈디렉토리/.ssh/authorized_keys 파일 끝에 id_rsa.pub파일의 내용을 직접 복사해서 추가하여도 된다. 이제 client에서 server로 SSH 접속을 시도해 보자. SSH 뿐만 아니라 scp, rsync 같이 SSH 프로토콜을 사용하는 명령들에도 자동으로 적용되니 참고하도록 하자.
주의사항
앞서와 같이 설정할 경우, client 컴퓨터의 보안이 매우 중요해진다. 크래커가 client 컴퓨터에서 권한을 얻게된다면 SSH 접속 시도만으로 server 컴퓨터에서의 권한을 얻을 수 있기 때문이다. 위에서 설명한 방법을 사용하느냐의 문제는 전적으로 사용자의 판단에 맡기며 이와 관련하여 일어난 보안 사고에 대해서는 글쓴이는 책임이 없음을 밝힌다. 위의 내용을 실제로 적용하기 전에 테스트를 해보고 보안 문제를 꼼꼼히 따져보도록 하자.