SSH 간단 정리
SSH이란
SSH는 secured shell로 원격 호스트에 접속하기 위한 프로토콜이다.
Shell OS의 기능을 감싸고 이를 사용자가 사용할 수 있도록 인터페이스를 제공하는 프로그램이다.
secured + shell 클라이언트가 보안적으로 안전하게 서버의 shell에 접근하는 것
SSH 왜 사용할까?
- 원격 서버의 터미널을 사용하기 위해 접속
- 서버의 데이터를 클라이언트에 흘려보내기 위해(터널링 기법)
SSH 원리
간단하게 접속하고자 하는 서버에 자신의 public key가 있으면 이게 서버에 출입가능하도록 등록이 된 것이고 자신의 private key로 인증을 한다고 보면 쉽다. 실제로는 Hash, 대칭키와 함께 더 복잡한 과정으로 인증한다.
SSH 사용법
- 키를 생성한다.
1
$ ssh-keygen -t rsa // RSA알고리즘으로 생성한다는 뜻
그러면 ~/.ssh/에 비밀키(id_rsa)와 공개키(id_rsa.pub) 한쌍이 생성된다.
- 접속할 서버의 .ssh/authorized_keys에 공개키를 추가
이러면 서버에 출입 등록이 완료된 것이다.
- private key를 이용하여 서버에 접속
- 명시적으로 key 파일을 지정하는 방법
1
$ ssh -i ~/ssh/id_rsa 서버주소 //-i옵션은 identity file로 private key파일 경로를 명시
- 묵시적 위치 사용
만약 key파일을 명시하지 않으면 ~/.ssh 아래 id_rsa 같이 잘 알려져 있는 파일을 찾는다
- SSH Agent 사용
1 2 3 4
$ 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 프로세스에게 key정보를 준다.
Agent-Forwarding
ssh로 생성된 클라이언트와 서버간의 터널을 통해 원격 서버의 ssh 요청 등을 클라이언트의 ssh-agent에게 보내, 마치 원격서버에 ssh-agent가 띄워진 것 처럼 동작할 수 있다.. 따라서 key를 원격서버에 두지 않고도 key로 접속할 수 있는 다른 서버에 ssh 접속을 할 수 있다.