[linux] ssh key를 생성하고 ssh의 키 인증 방식으로 접속하는 방법.

2021. 9. 12. 17:14OperatingSystem/linux

728x90
728x90

*ssh 키 인증 접속 설명.

  • 접속하려는 서버 계정의 패스워드를 입력하지 않고 ssh 접속(키 인증 방식)이 가능함.
  • 클라이언트 노드는 비밀키/공개키를 가지고 있고 서버 노드는 클라이언트 노드의 공개키를 가지고 있을 때, 사용할 수 있는 ssh 접속 방법(키 인증 방식)임.

*ssh 키 인증 접속 방법.

  1. 클라이언트 노드에서 "$ssh-keygen ..." 명령을 수행하여, 클라이언트 노드의 공개키와 비밀키를 생성.
  2. 생성된 클라이언트 노드의 공개키 파일의 값을 서버 노드의 "~/.ssh/authorized_keys" 파일에 저장.
  3. 클라이언트 노드에서 서버 노드로 "$ ssh ..." 접속 시도.

*ssh 인증 키 접속 수행.

클라이언트 노드에서 $ ssh-keygen 명령어를 수행하여, private key(id_rsa), public key(id_rsa.pub) 생성.

  • -t 옵션의 인자로 dsa, ecdsa, ed25519, rsa ... 암호화 알고리즘을 선택할 수 있음.
$ ssh-keygen -t rsa

 

private key(id_rsa), public key(id_rsa.pub) 저장 위치 설정.

Enter file in which to save the key ($HOME/.ssh/id_rsa):

 

private key(id_rsa), public key(id_rsa.pub)의 암호 설정.

  • 자동 로그인을 수행하려면, 생략해야 함.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

 

$ ssh-keygen -t rsa 수행.

  • 키의 저장 위치와 암호를 설정하지 않았을 때의 로그.
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key ($HOME/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in ~/.ssh/id_rsa
Your public key has been saved in $HOME/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:IKCrXeS7mISQ3s95cv01Ljc9uSdDdJ6ocKGTmx0vv/Q whoami@`hostname`
The key's randomart image is:
+---[RSA 3072]----+
|  .              |
| . .             |
|.   o .          |
| o o . .   .  . .|
|+   o   S o ...o.|
|+o.. .   = o ....|
|o.o..   . B +=. .|
| . ooo.o + =++=+.|
|  o .++   ..=+oE+|
+----[SHA256]-----+

생성된 비밀키(id_rsa)와 공개키(id_rsa.pub)를 확인.

$ ls -al ~/.ssh
total 20
…
-rw-------.  1 whoami 2602 Sep 10 05:05 id_rsa
-rw-r--r--.  1 whoami  567 Sep 10 05:05 id_rsa.pub
-rw-r--r--.  1 whoami  807 Jul  9 05:37 known_hosts

클라이언트 노드의 공개키(~/.ssh/id_rsa_pub)를 출력 후 출력된 내용을 복사.

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC3W+CS11LhZkpjOFect1X5A0171A8a2n2bmbw5xjfp0AN6efXBBans+GENKUXi2PU17WBqAeecb4jL4HnPABa0plECjbd9iXHoB4IyKF5CiStaO6EiNjT9yyKQImG8DTOfBtv81cL38f9Asp+v3v0g61LS2jJAAgi102tEo/mjvpIQTo2KGADKckJAHfz259g0KqqR+T8Jei+8WESRZiA+uFYpM7JbEkUem0T0e8OwCT1HVFDNdYZitl/mkFszd1VqL4psQMoeEsQWZeEXY32m6mccU44qoG2ZT2K4tgdPdpqHmtPjTPdI9hwYCFCO9ZwpbFekIXt/grII2WtkoOG5lK7qPFi+/mkkgJ8Eal3FYwpTrrHUDyz2K/CXQdRypf3MKa0sz+RUFtVC3wVdFqVPUk3SbZ2wBwFjeaPWezcmkGEZk+9ONKAkKQVrh6zKKR9HSfpZ54Sj6rJHqvjo7adCWP2sZ/9DNiAZuPdANcEX9wiDm0pLt0148EHTFSnSeF0= whoami@`hostname`

 

서버 노드의 ~/.ssh/authorized_keys 파일에 복사한 내용을 붙여넣고 저장.

$ cd ~/.ssh
$ vi authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC3W+CS11LhZkpjOFect1X5A0171A8a2n2bmbw5xjfp0AN6efXBBans+GENKUXi2PU17WBqAeecb4jL4HnPABa0plECjbd9iXHoB4IyKF5CiStaO6EiNjT9yyKQImG8DTOfBtv81cL38f9Asp+v3v0g61LS2jJAAgi102tEo/mjvpIQTo2KGADKckJAHfz259g0KqqR+T8Jei+8WESRZiA+uFYpM7JbEkUem0T0e8OwCT1HVFDNdYZitl/mkFszd1VqL4psQMoeEsQWZeEXY32m6mccU44qoG2ZT2K4tgdPdpqHmtPjTPdI9hwYCFCO9ZwpbFekIXt/grII2WtkoOG5lK7qPFi+/mkkgJ8Eal3FYwpTrrHUDyz2K/CXQdRypf3MKa0sz+RUFtVC3wVdFqVPUk3SbZ2wBwFjeaPWezcmkGEZk+9ONKAkKQVrh6zKKR9HSfpZ54Sj6rJHqvjo7adCWP2sZ/9DNiAZuPdANcEX9wiDm0pLt0148EHTFSnSeF0= whoami@`hostname`

클라이언트 노드에서 서버 노드로 $ ssh ... 접속 시도.

  • -v 옵션을 통해서, 접속 과정을 자세하게 확인.
  • public key 방식과 생성한 id_rsa를 사용하여, 접속한 것을 확인.  
  • 패스워드 인증 없이 접속한 것을 확인.
$ ssh -v [서버 노드의 계정]@[서버 노드의 IP]
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ../.ssh/id_rsa
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
debug1: Authentication succeeded (publickey).
Authenticated to ... ([...]:...).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = ko_KR.UTF-8
debug1: Sending subsystem: sftp
Connected to . ...
sftp> quit
728x90
728x90