SSH는 secured shell로 원격 호스트에 접속하기 위한 프로토콜이다.
Shell
OS의 기능을 감싸고 이를 사용자가 사용할 수 있도록 인터페이스를 제공하는 프로그램이다.
secured + shell
클라이언트가 보안적으로 안전하게 서버의 shell에 접근하는 것
간단하게 접속하고자 하는 서버에 자신의 public key가 있으면 이게 서버에 출입가능하도록 등록이 된 것이고 자신의 private key로 인증을 한다고 보면 쉽다. 실제로는 Hash, 대칭키와 함께 더 복잡한 과정으로 인증한다.
- 키를 생성한다.
$ ssh-keygen -t rsa // RSA알고리즘으로 생성한다는 뜻
그러면 ~/.ssh/에 비밀키(id_rsa)와 공개키(id_rsa.pub) 한쌍이 생성된다.
- 접속할 서버의 .ssh/authorized_keys에 공개키를 추가
이러면 서버에 출입 등록이 완료된 것이다.
- private key를 이용하여 서버에 접속
명시적으로 key 파일을 지정하는 방법
$ ssh -i ~/ssh/id_rsa 서버주소 //-i옵션은 identity file로 private key파일 경로를 명시
묵시적 위치 사용
만약 key파일을 명시하지 않으면 ~/.ssh 아래 id_rsa 같이 잘 알려져 있는 파일을 찾는다
SSH Agent 사용
$ eval $(ssh-agent) // $ssh-agent의 출력값을 명령어로 실행, ssh-agent 띄움
$ ssh-add 키파일경로 // ssh-agent에 키파일 추가
$ ssh-add -d // 키파일 삭제
$ ssh-add -l // 키파일 조회
매 접속마다 key파일을 명시하는 것은 번거롭기 때문에 key를 메모리에 두고 인증할 때 처리해주는 ssh agent를 사용하면 편하다.
ssh-agent 동작
key파일 정보들을 가지고 있는 프로세스, UNIX 도메인 소켓(local machine에서 message passing 방법을 통해 효율적으로 통신)을 통해 ssh, scp프로세스에게 key정보를 준다.
ssh로 생성된 클라이언트와 서버간의 터널을 통해 원격 서버의 ssh 요청 등을 클라이언트의 ssh-agent에게 보내, 마치 원격서버에 ssh-agent가 띄워진 것 처럼 동작할 수 있다.. 따라서 key를 원격서버에 두지 않고도 key로 접속할 수 있는 다른 서버에 ssh, scp접속을 할 수 있다.