본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Linux

[Linux] ssh key 기반 인증

by iamlucia 2021. 2. 21.

 

ssh key 기반 인증  


SSH 키 기반 인증을 사용하면, 암호없이 인증이 가능하다.

이를 위해서는 개인키 및 공개키로 이루어진 암호화 키 파일 pair를 생성해야 한다.

 

💡 개인키 : 인증용으로 사용되며 안전하게 유지되어야 하는 키 
공개키: 연결하고자 하는 시스템에 복사되어 개인키를 확인하는 데 사용하는 키

 

ssh key 실습


 

📍환경: 서로 네트워크 통신 가능한 가상 머신 2대(a-server & b-server) 

 

🔑 간단한 방식의 ssh key 기반 접속 설정

 

$ ssh-keygen : 개인키 및 공개키 생성 

해당 계정의 홈디렉토리 아래 .ssh 폴더가 생성되는데, 그 아래 id_rsa 및 id_rsa.pub 파일에 각 키가 저장된다. 

이때 고유한 이름을 입력하지 않으면 id_* 와 같이 디폴트명으로 파일이 생성된다.

 

$ ssh-copy-id : 공개 키를 대상 서버에 복사, 대상 서버와 서버의 계정을 명시하여 복사한다.

 

[ops1@a-server ~]$ ssh-keygen
[ops1@a-server ~]
$ ssh-copy-id ops2@b-server
[ops1@a-server ~]
$ ssh ops2@b-server

 

 

$ ssh ops2@b-server : ssh 기반 접속 확인

 

🔑 암호화 키가 걸린SSH key 기반 접속 설정

 

$ ssh-keygen : 개인키 및 공개키를 생성하되, 특정 이름을 지정한다.

이전에 따로 key를 생성한 적이 없다면, 새로 이름을 지정한 키를 지정할 경로를 명시해주어야 한다.

또한 passphrase를 입력하는데 이는 해당 ssh-key를 사용하기 위한 암호로서 일종의 2차 보안 같은 기능을 한다.

 

$ ssh-copy-id -i [identity file] : 기본이 아닌 사용자 정의된 이름의 공개키를 복사하기 위해 -i 옵션을 사용한다.

이때 키 이름 뒤에 .pub을 붙여 공개키임을 명시한다.

 

[dev1@a-server ~]$ ssh-copy-id -i .ssh/safe_rsa.pub dev2@b-server

 

 

$ ssh -i [identity file] dev2@b-server : ssh 기반 접속 및 passphrase 입력하는 대화형 셀 확인 

 

[dev1@a-server ~]$ ssh -i .ssh/safe_rsa.pub dev2@b-server

 

 

🔑 암호화 키가 걸린SSH key 기반 접속을 '비대화형'으로 설정

 

보안을 위해 passphrase를 걸어놓은 ssh-key를 사용하는 건 좋지만, ssh 접속 시 일일이 passphrase를 입력하는 것은 매우 귀찮은 일이 되기도 한다.

따라서 passphrase를 요구하는 대화형셀을 생략하고 비대화형 인증을 하는 방식으로 설정해 본다.

 

$ eval $(ssh-agent) : ssh-agent의 명령을 한 번 더 돌려서, 임시로 암호를 메모리에 캐시한다. 

 

[dev1@a-server~]$ eval $(ssh-agent)
Agent pid 5613

 

 

$ ssh-add : ssh-agent를 실행시킨 다음 개인 키에 대해 설정한 passphrase를 전달한다. 

 

[dev1@a-server ~]$ ssh-add .ssh/safe_rsa

 

 

🔎 ssh-agent란, 임시로 암호를 메모리에 캐시할 수 있게 해주는 프로그램이다.
ssh를 사용하여 개인 키로 다른 시스템에 로그인할 때마다 키에 대한 passphrase를 입력할 필요 없이
자동으로 ssh-agent가 캐시하고 있던 암호를 제공한다.
즉, ssh 키가 암호로 보호되어 있는 경우 인증과정을 간편히 해주는 프로그램이라고 생각할 수 있다.
$ ssh-agent를 실행해보니 환경변수를 설정해주는 일종의 스크립트를 확인가능하다. 

 

 

[dev1@a-server ~]$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-wbMReYR1LDWm/agent.5690; export SSH_AUTH_SOCK;

SSH_AGENT_PID=5691; export SSH_AGENT_PID;
echo Agent pid 5691;

 

인증과정을 조금 간단하게 해준다면, 뭔가 보안적으로 문제가 있을 것처럼 느껴지지만 의외로

이런식으로 암호를 매번 치지 않는 것이 더욱 보안을 강화하는 방법이 되기도 한다.

암호를 치는 횟수가 많아진다는 것은, 내가 치는 암호를 옆에서 몰래 볼 횟수가 많다는  뜻이기도 하니까.

실습 완!