sshd 관련 SSH Key pair 사용하기 (2탄)

By qsp , Created on 15th Jun 2022

저번 포스팅에서는 ssh로 root로 접근을 못하게 했는데 local에서는 이것만도 꽤 효과가 좋을 듯 하다
봇들이 root로 로그인을 시도하는데 root로 로그인이 안되면 꽤 안심인 듯 하다.
그래서 내 데스크탑도 그렇게 했는데 안심이 된다.

거기에다가 만약 서버를 운용한다면 이번에는 아예 password로 로그인을 하는 것이 아니라
SSH key로 Authentication 을 해서 해커(?)로 부터 더욱 안전하게 보안을 유지할 수가 있다.

(이미지Ssh icons created by Freepik - Flaticon)

SSH Key Pair 만들어서 접속제한하기

자신의 desktop 등으로 local에서 작업한다
A cryptographic key-pair 만들어서 보안을 강화시킬 수가 있다

아래의 명령어를 실행하면 SSH Key를 만들어 준다

ssh-keygen -b 4096

-b 옵션은 키 pair를 만들게 되는데 4096-bit RSA key-pair를 만듬
만약 RSA키가 있었다면 덮어씌우므로 주의한다

위의 ssh-keygen 명령으로 home/.ssh 디렉토리에 키가 만들어진다.

권한 때문에 안 만들어진다면 권한을 확인해준다
.ssh 디렉토리가 root로 되어 있는지 확인

cd ~
ls -la 

root root 로 되어 있다면

sudo chown -R $USER:$USER .ssh

다시 돌아와서 위의 ssh-keygen 명령어를 쳤을 때 파일위치 물어보면 엔터 한번 치고
passphrase를 입력해준다~ 생략할 수도 있으나 하는 것을 추천

Generating public/private rsa key pair.
Enter file in which to save the key (/home/your_username/.ssh/id_rsa):

추후 ssh로 서버에 접속할 때 여기에서 설정한 passphrase를 물어본다

이제 ~/.ssh 디렉토리 안에 id_rsa, id_rsa.pub 이 있다. 만들어진 키를 서버로 보내야 한다

A private key는 id_rsa란 파일이름으로 만들어지고 다른 사람, 그룹이 볼 수 없게 해야한다
A publick key는 id_rsa.pub 파일로 만들어진다. 로그인을 할 서버에 있으면 되고 공개된 키다

encryption과 decryption이 이루어지는데

  • Signed Communication: 으로 로컬에서 private key를 통해서 메세지가 나가게 되고
  • Verification of Communicaiton: 은 서버에서 public키를 가지고 있어서 private key를 통해 보낸 메시지를 해독하게 된다

여기에서 ssh_key 만들기 확인할 수 있다 참고 사이트


ssh 키 보내기

이제 만들어진 키를 복사해서 서버에서 사용할 수 있게 보낼 수 있다
서버에서 내가 사용할 특정 유저의 home 디렉토리의 .ssh 디렉토리 안으로 보내게 되는데
authorized_keys 파일로 생성이 되고 여기에는 public 키가 추가가 된다.

서버의user@서버아이피 형식으로 입력한다

ssh-copy-id server_user@172.10.24.10

이제 server_user@172.10.24.10's password 하고 비번을 물어보면
서버쪽 user의 비번을 넣어주면 key 추가된다

좀더 보안을 강화하는 차원에서 권한 변경해준다

sudo chmod 700 ~/.ssh/
cd .ssh
sudo chmod 600 authorized_keys 

디렉토리에 group, other 권한이 없으므로 접근할 수 없다
authorized_keys 파일은 읽고 쓰기만 가능하게 해준다

이렇게 authorized_keys에는 public키가 포함되게 되었지만
로컬에서 보관중인 id_rsa는 유출되지 않게 잘 보관해야한다~ public키와 짝꿍이기 때문에

local 내 컴에서도

sudo chmod 700 ~/.ssh/
cd .ssh
sudo chmod 600 ./*

private key인 id_rsa 는 공개키가 아님에 주의해야한다고 함


이제 서버 접속하기

서버의 sshd_config 파일을 수정한다

sudo vi /etc/ssh/sshd_config

yes에서 no 바꿔준다. (저번 포스팅에서 했던)

PermitRootLogin no

ssh password authentication도 yes에서 no 로 바꿔서 패스워드 로그인이 안되게 한다

PasswordAuthentication no

#AddressFamily any 를 찾아보자. 주석을 해제하고 inet 으로 바꿔준다

AddressFamily inet

inet은 listen only on IPv4, inet6은 listen only on IPv6
그리고 system-wide로 적용되는 것이 아니고 sshd에 한함

이제 wq를 눌러서 저장을 한 후 sshd를 재시작 해준다

sudo systemctl restart sshd


ssh로 로그인 하자

이제 로그인을 해보자
내 로컬 컴에서 터미널을 열고 ssh 자신의서버_유저아이디@서버주소를 입력해서 늘 하던대로 접속을 하면

ssh server_user_id@72.10.24.10
passpharase 로 입력을 했던 비번을 요구한다. 해당 비번을 넣고 엔터를 치게 되면 접속이 되게 되고
그 다음부터는 exit 을 하고 다시 로그인을 할 때에는
그냥 뿅 하고 로그인이 된다

한번 passphrase를 입력하면 logout이나 재부팅을 하기 전까지는 다른 세션 터미널을 열더라도
비번을 묻지 않고 접속을 한다. 물론 묻지말라고 unlock 해달라는 체크박스도 보인다

바로 직전에 했던 ssh-copy-id 명령을 통해서 키가 복사되었기 때문에 ssh 로그인 접속이 잘 된다.

그리고 이번에는 저번과 마찬가지로 root로 ssh 접속을 하려고 하면
(현재 root, password로 로그인이 다 막혀 있는 상태)
예를 들어 root@192.72.10.24 이런식으로 로그인을 시도하게 되면

root@192.72.10.24: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

하고 차단되는 것이 확인 된다. 👍👍

하지만 이거는 딱 로컬 내 컴퓨터에서 rsa key가 있어야만 작동하는 것 같다
이제 다른곳에서는 아마 접속을 못 할 것.
아마도 멀티로 더 추가 할 수 있을 거 같다. 좀 더 알아봐야겠다

오늘은 여기까지ㅋㅋ

댓글

댓글이 없습니다.