공개키 인증을 사용한 ssh 설정

클라우드에 만들어 놓은 데모 서버들에 최근에 ssh 접속 시도가 계속되더니, 최근에는 너무 많이 시도가 들어왔다. 데모 서버라 기본 설정으로만 사용하기도 하고, 여러 컴퓨터에서 편하게 접속하기 위해서 기본 비밀번호 인증으로 사용하고 있었는데 이제는 더 이상 그냥 놔두기에는 찜찜한 단계까지 와 버렸다. 아무리 비밀번호가 복잡하다고는 하나, 누가 랜덤으로 접속을 시도한다는 것은 별로인 일이라..

처음에는 그냥 iptable에 blacklist를 등록했으나, 로그에서 검색을 해 보니 아이피를 계속 바꿔가면서 접속을 시도하는 것이 뭔가 조치를 취해야겠다는 생각을 했다.

sshd를 모두 키 인증을 통한 접속으로 변경하였다.


키 인증을 통합 접속 설정을 하기 위해서는 대략 아래와 같은 절차가 필요하다.

서버 쪽: CentOS / 클라이언트: Windows 11 기준

Key file 준비

  • 공개키 인증이란 공개키 (Public Key)와 개인키 (Private Key)로 된 하나의 키쌍을 만들어 해당 키 쌍으로 인증을 하는 것을 이야기한다. 해당 키 알고리즘은 소인수 분해의 수학적 알고리즘을 이용해서 역어셈블이 매우 어렵도록 하는 방법을 가지고 있다. 자세한 것은 RSA 알고리즘 등을 찾아서 읽어보면 좋다.
  • ssh 키 인증을 위해 중요하게 알아야 할 것은 한 쌍의 키를 만들어야 한다는 것이다. HTTPS에 사용되는 키와 같은 경우에는 키 자체의 신뢰성도 확보하기 위해서, 공인된 인증 기관(CA)에서 키를 발행 받지만, 우리끼리 사용하는 이 키 인증에 대해서는 굳이 그럴 필요는 없이 ssh-keygen이라는 프로그램을 사용하면 된다. Windows OS에서는 cygwin을 설치한 후 cygwin 터미널에서 실행하면 된다.
ssh-keygen -t rsa -b 4096-f keyfilename
  • 위 명령어는 rsa 알고리즘으로 4096 bit의 키를 keyfilename이라는 파일로 생성한다.
$ ssh-keygen -t rsa -b 4096-f keyfilename 
Generating public/private rsa key pair. 
Enter passphrase(empty for no passphrase):
  • passphrase에 본인만의 문구를 넣으면, 개인키에 한 번 더 암호를 거는 것으로 생각하면 된다.
$ ssh-keygen -t rsa -b 4096 -f keyfilename
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in keyfilename
Your public key has been saved in keyfilename.pub
The key fingerprint is:
SHA256:Omccvq8oAL2FhRXXXXXXXXoMgJI4XXXXXXx8 test@test-Desktop
The key's randomart image is:
+---[RSA 4096]----+
|B+=+             |
|+   .  = .       |
|oo   .. oo.      |
+----[SHA256]-----+
  • 위와 같은 메시지가 출력 후, 실행 폴더에 keyfilename 과 keyfilename.pub 2개의 파일이 생긴다. 여기서 keyfilename은 개인키, keyfilename.pub은 공개키이다. keyfilename.pub 공개키는 sshd 서버 쪽에 위치하도록 하고, 개인키는 접속하는 클라이언트 PC에 보관하면 된다.

Key file 복사

  • LinuxOS 같은 경우에는 자동으로 사용자 홈 폴더 아래 .ssh 폴더에 복사까지 완료하기도 하지만, Windows OS에서는 수동으로 해 줘야 할 수도 있다.
  • 개인키는 Windows OS 사용자 홈 폴더 아래 .ssh 폴더에 복사해 넣는다. 일반적으로 C:\Users\사용자명\.ssh 아래가 된다. 복사한 이후에는 C:\Users\사용자명\.ssh\keyfilename이라는 파일이 존재한다.
  • 공개키는 우선 파일 이름을 authorized_keys로 변경한다. 그 이유는 sshd의 기본 설정이 authorized_keys라는 공개키명을 찾도록 되어 있기 때문이다. 변경이 가능하지만, 기본 설정을 따라서 하는 것이 쉽다. 이후 사용자 홈 폴더 아래 .ssh 폴더에 복사해 넣는다. 서버 쪽으로 파일을 옮기기 위해서는 FTP 프로그램 등을 사용해서 옮겨야 할 수 있다. 복사한 이후에는 ~/.ssh/authorized_keys이라는 파일이 존재한다.

SSH 구성 변경

  • 서버의 SSH 서버의 구성을 변경한다. 아래와 같이 sshd_config 파일을 편집기를 통해 편집할 수 있도록 한다.
[user@server ~]# vi /etc/ssh/sshd_config
  • PasswordAuthentication을 no로 설정하여 일반 암호 접속을 금지한다.
  • 키 인증을 위한 AuthorizedKeysFile 명이 위에서 설정한 파일명과 동일하게 설정될 수 있도록 한다.
PasswordAuthentication no AuthorizedKeysFile .ssh/authorized_keys
  • 아래 명령어를 사용하여 sshd 서비스를 재 기동한다.

[user@server ~]# systemctl restart sshd

키 인증을 통한 접속

  • 아래와 같이 -i 파라미터를 사용해서 클라이언트에 있는 개인키 파일 경로를 지정해 준다.
C:\>ssh user@server_name -p 22-i C:\Users\사용자명\.ssh\keyfilename
  • 키 파일을 만들 때 passphrase를 입력해서 만든 경우, passphrase를 입력한 후 접속이 정상적으로 이루어지는 것을 확인할 수 있다.
C:\>ssh user@server_name -p 22 -i C:\Users\사용자명\.ssh\keyfilename
Enter passphrase for key 'C:\Users\사용자명\.ssh\keyfilename':
Last login: Sun Jan  1 01:01:11 2024 from 111.111.111.111

읽어보면 좋은 링크

Leave a Reply

Your email address will not be published. Required fields are marked *