암호를 아무리 길고 사전에 없는 해괴한 형태로 만든다 한 들, 인간이 암기하고 입력할 수 있는 암호에는 기억력과 시간의 한계가 있다. 반면 컴퓨터의 처리속도는 인간의 것에 비할 바가 아니기에 Brute-force 공격앞에 당해낼 재간이 없다. 모든 경우의 수를 빠르고, 누락되는 것 없이, 쉬지도 않고 될 때까지 시도한다. 따라서 아무나 접근할 수 있는 공개된 네트워크에서 서버를 보호하려면 일반적인 계정 인증이 아닌 다른 인증 방법을 심도있게 고려하여야 한다.

 

공개키 인증방식은 임의의 장문을 생성하여 보관하고 그것으로 데이터를 암호화, 복호화 한다. 그리고 암호화, 복호화에 사용되는 키가 다르므로 대칭키에 비하여 키의 유출로 인한 위협을 줄일 수 있다. 나아가 그 개인키도 공인인증서처럼 암호를 걸어 사용할 수 있다. 대신 개인키를 잃어버리면 주인도 못 들어간다.

 

암호를 사용한 SSH 접속의 설정을 완료한 상태에서 시작합니다.

 

암호 인증 SSH부터 구축하려면: 2018/09/04 - [CentOS 7] 내가 정한 포트로 SSH 구현하기

 

 

 

 

0. SSH에 사용할 공개키, 개인키 쌍을 만든다. 개인키는 유출에 각별히 주의한다.

 

공개키, 개인키는 단일 장치에서 동시에 만들어서 공개키는 서버에 두고, 개인키는 사용자가 보유해야한다.

 

키 쌍은 서버에서도, 클라이언트에서도 만들 수 있으나 개인키의 보안이 훨씬 중요하므로 클라이언트에서 만들고 키 쌍을 만들고 공개키를 서버에 업로드 하는 것이 바람직 할 것이다. 물론 반대로 해도 안되는 것은 아니다.

 

윈도우에서는 Xshell이나 Putty, 리눅스에서는 ssh-keygen 등을 사용해 키 쌍을 만들 수 있다.

 

키는 대체로 1024 비트 이상이 권장된다.

 

 

위의 것이 개인키, 아래의 것(*.pub)이 공개키이다.

 

 

 

1. 공개키를 저장할 폴더를 만들고 권한을 지정한다.
[glacier@glacier ~]$ mkdir ~/.ssh -m 700
[glacier@glacier ~]$ ls -al ~ | grep ssh
drwx------.  2 glacier glacier 4096 12월 24 12:36 .ssh

 

 

 

2. 공개키를 업로드하고 권한을 지정한다.
[glacier@glacier ~]$ vi ~/.ssh/authorized_keys
[glacier@glacier ~]$ chmod 600 ~/.ssh/authorized_keys 

SCP도 좋고 파이프도 좋지만 가장 쉬운 방법, 공개키를 텍스트에디터로 열어서 복사, vi열고 붙여넣기 해도 된다.

 

 

 

3. 키가 있는 경로에 "ssh_home_t" 보안 컨텍스트가 있는지 확인한다. (아닌 경우 restorecon -Rv ~/.ssh)

[glacier@glacier ~]$ ls -alZ ~/.ssh
drwx------. glacier glacier unconfined_u:object_r:ssh_home_t:s0 .
drwx------. glacier glacier unconfined_u:object_r:user_home_dir_t:s0 ..
-rw-------. glacier glacier unconfined_u:object_r:ssh_home_t:s0 authorized_keys

 

 

 

4. /etc/ssh/sshd_config 를 수정한다.

[glacier@glacier ~]$ sudo vi /etc/ssh/sshd_config

StrictModes yes
#로그인을 허가하기 전 사용자의 홈폴더 권한을 검사
PubkeyAuthentication yes
#공개키인증 활성화
AuthorizedKeysFile .ssh/authorized_keys
#공개키경로 지정
ChallengeResponseAuthentication no
#로그인 시도에 대하여 답변 메시지를 보내지 않음

#RSAAuthentication yes
#설정할 필요 없음. SSHv1에서만 사용되는 옵션.
#UsePAM no
#설정금지. RHEL 미지원으로 문제가 발생할 가능성 있음.

 

 

 

5. sshd를 재시작하고 개인키로 SSH 접속을 시도해본다.

[glacier@glacier ~]$ sudo systemctl restart sshd

 

 

 

6. 성공했다면 /etc/ssh/sshd_config 를 수정하여 패스워드 인증을 끄고 sshd를 재시작한다.

[glacier@glacier ~]$ sudo vi /etc/ssh/sshd_config

PasswordAuthentication no

[glacier@glacier ~]$ sudo systemctl restart sshd

 

 

 

참고:

 

https://www.server-world.info/en/note?os=CentOS_7&p=ssh&f=4

https://www.hugeserver.com/kb/secure-ssh-on-centos-7/

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-centos7

https://www.ibm.com/support/knowledgecenter/ko/SSIGMP_1.0.0/pim/unixandlinux/install_config/t_key_unilinux.htm?cp=SSRMWJ_7.0.1.10

https://www.ibm.com/support/knowledgecenter/ko/SSPFMY_1.3.3/com.ibm.scala.doc/config/iwa_config_secure_streaming.html

https://wiki.centos.org/HowTos/Network/SecuringSSH#head-9c5717fe7f9bb26332c9d67571200f8c1e4324bc

Posted by 비형랑#
: