Anchor | ||||
---|---|---|---|---|
|
이 문서의 위치: https://docs.google.com/document/d/1XuzFoewcI-qq8VtJJcvqcUYghnUEIPN39-zLfC4Px5U/edit#
허두진 2019.05.30.
Anchor | ||||
---|---|---|---|---|
|
...
Anchor | ||||
---|---|---|---|---|
|
Anchor | ||||
---|---|---|---|---|
|
- 인증서 생성 서버에서 다음 명령 실행합니다. 암호를 묻게 되면 입력합니다. 이후 키를 인증할 때 이 암호를
입력해야 합니다.
$ ssh-keygen -f server_ca
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in server_ca.
Your public key has been saved in server_ca.pub.
The key fingerprint is:
SHA256:wkoynUi5rXkMQXcNrpFmOWh+JbONIOCxeWv8WOxUbm4 root@uby
The key's randomart image is:
+---[RSA 2048]----+
|... . oo |
|o.++ = . |
|.+B.X o. |
| =oXo&o |
| B+X++oS |
| .X*.o. |
| o.+o E |
| . . |
| |
+----[SHA256]-----+
인증에 사용할 키로 rsa 형식의 server_ca 키를 생성하였습니다. rsa 형식이 아닌 다른 형식을 사용할 경우 -t 옵션을 사용하여 원하는 키 형식을 지정할 수 있습니다.
인증을 위한 키 쌍이 생성된 것을 확인합니다.
$ ls
server_ca server_ca.pub
Anchor | ||||
---|---|---|---|---|
|
서명할 호스트 키가 인증 서버의 것이 아니라면 scp 명령 등을 사용하여 해당 서버의 호스트 키를 가져와야 합니다. SSH 서버의 호스트 키 읽기 권한은 root에게만 있습니다.
서명할 원격 장비의 호스트 키 가져오기②:
# scp root@host.netsarang.com:/etc/ssh/ssh_host_rsa_key.pub .
서명용 키를 사용하여 가져온 호스트 키를 서명합니다:
# ssh-keygen -s server_ca -I key_id -h -n host.netsarang.com -V +52w ssh_host_rsa_key.pub
Signed host key ssh_host_rsa_key-cert.pub: id "key_id" serial 0 for host.netsarang.com...옵션 설명.
- s: 서명용 키 이름.
- I: 로깅 목적으로 사용하기 위한 이름입니다.
- h: 서명하고자 하는 것이 호스트 키임을 나타냅니다.
- n: 서명용 호스트 키를 사용할 SSH 서버의 이름입니다. ,(comma)로 여러 개 나열할 수 있습니다. SSH 클라이언트는 이 이름 중 하나를 사용해야 합니다. 이 값을 생략하면 모든 SSH 서버에 사용할 수 있습니다.
- V: 인증서 유효 기간입니다. 예시는 52주(1년)입니다.
서명한 원격 서버의 호스트 키를 해당 원격 서버에 복사합니다③. 저장 위치를 sshd_config에서 지정해야 합니다:
# scp ssh_host_rsa_key-cert.pub root@host.netsarang.com:/etc/ssh/
위의 과정을 마친 후 복사해 온 호스트 키와 인증된 호스트 키는 필요 없으므로 삭제합니다:
# rm ssh_host_rsa_key.pub ssh_host_rsa_key-cert.pub
...
Anchor | ||||
---|---|---|---|---|
|
SSH 서버에서 다음 파일 수정합니다. root의 권한이 필요합니다:
# vi /etc/ssh/sshd_config
HostCertificate 줄을 찾아(없으면 생성) 위에서 생성한 서명된 호스트 키 이름 입력합니다④. 인증된 호스트 키 파일은 인증 서버에서 인증 후 복사해 온 파일입니다.
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
저장 후 다음 명령으로 SSH 데몬 재시작합니다.
# service ssh restart
Anchor | ||||
---|---|---|---|---|
|
- 호스트 키 정보를 저장하는 곳에서 메모장 등을 이용하여 'ca_keys'라는 이름의 텍스트 파일을 생성합니다. 호스트 키에 대한 정보는 기본값으로 '문서 폴더 내의 \Netsarang Computer\6\SECSH\HostKeys\' 폴더에 저장됩니다
인증 서버에서 서명용 인증서 파일의 공개 키(server_ca.pub) 내용을 복사합니다.
# cat ~/server_ca.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxC+gikReZlWEnZhKkGzhcNeRD3dKh0L1opw4/LQJcUPfRj07E3am
bJfKhX/G4gfrKZ/ju0nanbq+XViNA4cpTIJq6xVk1uVvnQVOi09p4SIyqffahO9S+GxGj8apv7GkailNyYvoMYordMbIx8UVxtcT
R5AeWZMAXJM6GdIyRkKxH0/Zm1r9tsVPraaMOsKc+8isjJilwiQAhxdWVqvojPmXWE6V1R4E0wNgiHOZ+Wc72nfHh0oiv
ZC4/i3JuZVH7kIDb+ugbsL8zFfauDevuxWeJVWn8r8SduMUVTMCzlqZKlhWb4SNCfv4j7DolKZ+KcQLbAfwybVr3Jy5dSl root@auth위에서 복사한 내용을 ca_keys 파일에 추가합니다⑤. 이 때 이 공개 키 내용 앞에 @cert-authority 와 도메인 제한 내용을 다음과 같이 첨가한 후 저장합니다.
@cert-authority *.netsarang.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxC+gikReZlWEnZhKkGzhcNeRD3dKh0L1opw4/LQJcUPfRj07E3ambJ
fKhX/G4gfrKZ/ju0nanbq+XViNA4cpTIJq6xVk1uVvnQVOi09p4SIyqffahO9S+GxGj8apv7GkailNyYvoMYordMbIx8UVxtcTR5AeWZMAXJM6GdIyRkKxH0/Zm1r9
tsVPraaMOsKc+8isjJilwiQAhxdWVqvojPmXWE6V1R4E0wNgiHOZ+Wc72nfHh0oivZC4/i3JuZVH7kIDb+ugbsL8zFfauDevuxWeJVWn8r8SduMUVTMCzlqZKlh
Wb4SNCfv4j7DolKZ+KcQLbAfwybVr3Jy5dSl root@auth- 확인⑥.
호스트 키가 인증되지 않고 해당 호스트에 대한 정보가 없을 때:
호스트 키가 인증된 경우:
위 대화 창이 나타나지 않고 바로 사용자 인증 과정으로 진행합니다.
Anchor | ||||
---|---|---|---|---|
|
...
Anchor | ||||
---|---|---|---|---|
|
인증 서버에서 사용자 키를 서명하기 위한 서명용 키 세트를 생성합니다:
# ssh-keygen -f users_ca |
암호를 묻게 되면 입력합니다. 이 키로 다른 키들을 서명할 때 사용하게 될 암호입니다. 인증에 사용할 키로 rsa 형식의 server_ca 키를 생성하였습니다. rsa 형식이 아닌 다른 형식을 사용할 경우 -t 옵션을 사용하여 원하는 키 형식을 지정할 수 있습니다.
Anchor | ||||
---|---|---|---|---|
|
인증 서버에서 위에서 생성한 서명용 인증서 세트 중 공개 키를 SSH 서버에 복사합니다②. SSH 서버의 root 권한이 필요합니다:
# scp users_ca.pub root@host.netsarang.com:/etc/ssh/
SSH 서버에서 SSH 서버의 데몬 설정 파일인 sshd_config 파일을 수정합니다. root 권한이 필요합니다:
# vi /etc/ssh/sshd_config
호스트 인증 시 적용하였던 HostCertificate 줄 아래에 다음 내용을 추가합니다③. users_ca.pub는 위 1.에서 복사해 온 파일입니다:
TrustedUserCAKeys /etc/ssh/users_ca.pub
SSH 서비스 데몬을 재구동합니다:
# service ssh restart
Anchor | ||||
---|---|---|---|---|
|
- Xshell에서 서명에 사용할 키 쌍을 만듭니다④.
사용자 키 생성 과정 중에 해당 키의 공개 키를 따로 파일로 저장해 놓습니다. 해당 사용자 키의 공개 키는 Xshell의 사용자 키 관리자에서 언제든지 다시 확인할 수 있습니다. - 사용자 키 생성 과정에서 저장해 놓은 사용자 키의 공개 키를 서명 서버에 복사해 옵니다⑤. 대상은 개인 키(private key)인 id_rsa_2048 파일이 아닌 공개 키(Public key) 파일 id_rsa_2048.pub입니다:
users_ca 키 파일을 이용하여 서명합니다. 호스트 키 서명할 때와 비슷하지만 사용자 키에 대한 것이므로 -h 파라미터는 사용하지 않습니다. 아래 명령에서 -n 파라미터 뒤의 "username1,username2"는 ssh 서버의 사용자 이름들입니다. 서명된 키로 접속하고자 하는 사용자 이름을 나열할 수 있습니다. 이 값을 생략하면 호스트 키 서명 때와 달리 SSH 서버의 어떠한 사용자에게도 위의 사용자 키로 로그인할 수 없습니다. 반드시 지정해야 합니다.
$ ssh-keygen -s users_ca -I key_id -n username1,username2,... -V +52w id_rsa_2048.pub
Enter passphrase:
Signed user key id_rsa_2048-cert.pub: id "key_id" serial 0 for username1,username2,... valid from 2019-01-31T09:23:00 to 2020-01-30T09:24:30
$ ls id_rsa*
id_rsa_2048-cert.pub id_rsa_2048.pub암호 입력 화면에서 users_ca 를 생성할 때 입력한 암호를 입력합니다. id_rsa_2048-cert.pub라는 서명된 파일이 생성된 것을 확인할 수 있습니다.
- 서명된 id_rsa_2048-cert.pub 파일을 Xshell의 사용자 키
폴더에 복사합니다⑥:Anchor _GoBack _GoBack 확인
SSH 서버에 로그인하고자 하는 사용자에 공개 키 정보가 없는 것을 확인합니다:$ hostname
host
$ id
uid=1001(username1) gid=1001(username1) groups=1001(username1)
$ cat ~/.ssh/authorized_keys => 비어 있음.
$Xshell에서 SSH 서버로 SSH 접속을 시도합니다.
Xshell에서 사용자 키가 인증되지 않은 경우:
Xshell에서 사용자 키가 인증된 경우:
SSH 서버에 공개 키를 등록하지 않았어도 SSH 클라이언트의 개인 키인 id_rsa_2048의 키 암호를 입력하면 로그인이 가능합니다. 공개 키 서명 시 -n 옵션과 함께 나열한 username1,username2,...에 해당하는 사용자로 하는 접속은 공개 키를 등록하지 않아도 로그인이 가능합니다.Anchor _65jzowzdoxk9 _65jzowzdoxk9
...
CA 서버에서 서명용 키 생성①
$ ssh-keygen -f server_ca
CA 서버에 서명할 SSH 서버의 호스트 키 가져오기②:
# scp root@host.netsarang.com:/etc/ssh/ssh_host_rsa_key.pub .
CA 서버에서 서명용 키를 사용하여 가져온 호스트 키를 서명합니다:
# ssh-keygen -s server_ca -I key_id -h -n host.netsarang.com -V +52w ssh_host_rsa_key.pub
서명한 원격 서버의 호스트 키를 해당 원격 서버에 복사합니다③:
# scp ssh_host_rsa_key-cert.pub root@host.netsarang.com:/etc/ssh/
SSH 서버에서 해야 하는 설정Anchor _ouzdo3blwnfx _ouzdo3blwnfx - sshd_config의 HostCertificate에 서명된 호스트 키
지정④:
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
저장 후 다음 명령으로 SSH 데몬 재시작합니다.
# service ssh restart
Xshell에서 해야 하는 설정Anchor _s0faqufyzkwb _s0faqufyzkwb - 호스트 키 정보를 저장하는 곳에서 메모장 등을 이용하여 ca_keys 파일을 생성합니다.
인증 서버에서 서명용 인증서 파일의 공개 키(server_ca.pub) 내용을 복사하여 ca_keys에 붙여 넣습니다⑤. 이 때 이 공개 키 내용 앞에 @cert-authority 와 도메인 제한 내용을 다음과 같이 첨가한 후 저장합니다.
@cert-authority *.netsarang.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCxC+gikReZlWEnZhKkGzhcNeRD3dKh0L1opw4/LQJcUPfRj07E3ambJfKhX/G4gfrKZ/ju0nanbq+XViNA4cpTIJq6xVk1uVvnQVOi09p4SIyqffahO9S+GxGj8apv7GkailNyYvoMYordMbIx8UVxtcTR5AeWZMAXJM6GdIyRkKxH0/Zm1r9tsVPraaMOsKc+8isjJilwiQAhxdWVqvojPmXWE6V1R4E0wNgiHOZ+Wc72nfHh0oivZC4/i3JuZVH7kIDb+ugbsL8zFfauDevuxWeJVWn8r8SduMUVTMCzlqZKlhWb4SNCfv4j7DolKZ+KcQLbAfwybVr3Jy5dSl root@auth
Anchor | ||||
---|---|---|---|---|
|
서명용 키 생성①
# ssh-keygen -f users_ca
인증 서버에서 위에서 생성한 서명용 인증서 세트 중 공개 키를 SSH 서버에 복사합니다②.
# scp users_ca.pub root@host.netsarang.com:/etc/ssh/
SSH 서버에서 SSH 서버의 데몬 설정 파일인 sshd_config 파일의 TrustedUserCAKeys에 users_ca.pub를 지정합니다
TrustedUserCAKeys /etc/ssh/users_ca.pub
SSH 서비스 데몬을 재구동합니다:
# service ssh restart
사용자 키 서명Anchor _82vqce27iqpe _82vqce27iqpe - Xshell에서 서명에 사용할 키를 생성합니다④.
- 위 사용자 키에 대한 공개 키를 생성하여 CA 서버 복사합니다⑤.
- users_ca 키 파일을 이용하여
서명합니다.
$ ssh-keygen -s users_ca -I key_id -n username1,username2,... -V +52w id_rsa_2048.pub
- 서명된 id_rsa_2048-cert.pub 파일을 id_rsa_2048.pub 파일이 있던 Xshell의 사용자 키 폴더에 복사합니다⑥:
- id_rsa_2048 키를 사용하여 공개 키 인증으로 SSH 서버에 접속을 시도합니다.