client의 public key를 server에 등록하면 끝.
cd ~/.ssh # 권한이 0700 이어야함
ssh-keygen
# 이후 그냥 다 엔터.
#그럼 id_rsa랑 id_rsa.pub가 생김
cd ~/.ssh
# client의 id_rsa.pub를 복사해서 넣기
# (파일명을 mac_local.pub로 했다고 가정)
cat mac_local.pub >> authorized_keys # client의 public key를 append 해주는거 임.
지금은 그냥 ubuntu server접속을 예시로 들었지만
ssh 통신을 하는 다른 곳에 많이 활용할 수 있다.
ex) public key를 github 서버에 등록하면 github 로그인이 필요 없어진다.
위 Client 작업에서 ssh-keygen
이후에 그냥 다 엔터를 쳐서 private key에 대한 비밀번호를 생성 안했는데
만약 그 비밀번호를 설정하면 server접속시 server 계정 비밀번호 대신 그 ssh private key 비밀번호를 쳐야 함.
근데 이 비밀번호 치는 작업이 귀찮으면 ssh-agent
라는 프로그램(데몬)을 백그라운드로 돌리고
ssh-add
명령으로 해당 private key 와 그 비밀번호를 등록해놓으면
ssh private key의 비밀번호를 치지않아도 자동으로 로그인 가능하게 해준다.
eval "$(ssh-agent)"
ssh-add ~/.ssh/{private key}
# 이후 private key의 비밀번호를 등록
eval
명령을 하는 이유ssh-agent
명령을 치면 daemon이 실행되면서 환경변수
를 설정하는 shell script를 출력하는데
ssh-agent를 실행시키는 동시에 환경변수까지 설정해주기 위해서 eval을 사용하는 것이다.
ssh-agent 명령만 친 모습
daemon은 돌아가고 있다!
ssh-agent 명령만 쳤더니 프로세스는 돌아가지만 환경변수 설정이 안 된 것을 볼 수 있다.
ssh 통신을 할때 key pair를 두 개 이용해서 한다.
"서버의 pair(public, private), 클라이언트의 pair(public, private)"
~/.ssh 폴더에 보면 known_hosts
와 authorized_keys
라는 public key가 등록된 파일이 두 개 있는데
known_hosts
에는 내가 다른 서버에 접속
할 때, 그 서버의 public key가 등록되고
authorized_keys
는 다른 컴퓨터가 client로서 내 서버에 접속
하려고 할 때, 그 client의 public key 다.
known_hosts
는 해당 서버 접속 시 자동으로 등록이 되고
authorized_keys
는 직접 등록을 해야 해당 클라이언트가 이 컴퓨터로 접속이 가능해진다.