SSH 인증키 생성하여 서버에 비밀번호 없이 간단하게 접속하기
SSH
SSH는 Secure-SHell로, 기존의 Telnet에 비공개 키 암호화 방식을 이용하여 안전하게 시스템 쉘에 원격 접속할 수 있는 기술이다.
인증을 위해 비밀번호를 사용할 수 있고, 비대칭 인증키를 사용할 수도 있다.
1. 비밀번호를 이용하여 접속하기
SSH를 이용하여 서버에 원격으로 접속할 수 있다.
ssh [사용자 이름]@[서버 주소] -p [포트 번호]`여기서 포트 번호의 기본값은 22이다.
비밀번호를 입력하고 엔터 키를 눌러 접속할 수 있다.
ssh yegang@example.com
yegang@example.com's password:비밀번호를 입력하면 보이지는 않지만 내부적으로는 비밀번호가 입력되고 있는 것이므로 엔터 키를 눌러 접속할 수 있다.
접속이 완료되면 마치 서버에 직접 가서 콘솔을 사용하는 것처럼 사용할 수 있다.
yegang@yegangs:~$ whoami
yegang2. SSH 인증키 사용하기
비밀번호를 입력하여 사용하는 경우 여러 가지 불편한 점이 있다.
로그인 할 때마다 비밀번호를 입력하여야 한다.
비밀번호가 유출되어 변경이 필요한 경우, 서버에 연결된 SSH 클라이언트 전체에 다시 비밀번호 변경 작업을 진행해야 한다.
일부 CI/CD 서비스에서는 비밀번호를 이용한 SSH 접속을 제한한다.
그래서 비밀번호를 이용한 SSH 사용은 지양하고, 인증키를 이용하여 접속을 하는 것이 권장된다.
서버 측에는 공개키를 저장하고, 클라이언트 측에 비밀키를 저장한다. 그러면 서버 측은 클라이언트가 적법한 사용자가 맞는지 인증할 수 있게 된다.
ssh-keygen명령어로공개키와비밀키를 생성하여 저장한다.공개키를 서버에 저장한다.이제 비밀키를 이용하여 편리하게 접속할 수 있다.
인증키 생성하기
비대칭 키 암호화 방식은 크게 RSA와 타원곡선 암호화가 있다. RSA는 소인수분해의 어려움을 이용하여 암호화하는 방식이고, 타원곡선은 타원곡선의 특징을 이용하여 암호화하는 방식이다.
ssh-keygen 명령을 이용하여 키를 생성한다. -t 옵션은 암호화의 종류, -b 옵션은 비트 수(RSA에서 사용), 그리고 -C 옵션은 주석이다.
필자는 rsa와 타원곡선 두 개를 만들 것이지만 여러분은 하나만 하길 바란다. 키가 많으면 관리하기 어렵거나 헷갈릴 수 있다.
RSA
ssh-keygen -t rsa -b 4096 -C "keygen test."타원곡선 (ED25519)
ssh-keygen -t ed25519 -C "ecc keygen test."
그러면 아래와 같이 키를 어디에 저장할 지 물어본다. 기본값은 ~/.ssh/id_[암호화 알고리즘]이다.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yegang/.ssh/id_rsa):엔터 키를 눌러 기본값으로 저장하자. 그러면 또 다음과 같이 물어본다.
Enter passphrase for "/home/yegang/.ssh/id_rsa" (empty for no passphrase):
Enter same passphrase again:여기서 passphrase란 인증키를 사용할 때 암호를 추가적으로 사용할 수 있는 기능이다. 암호를 입력하지 않고 엔터 키를 두 번 눌러 암호를 설정하지 않을 수도 있다.
그러면 성공적으로 키가 생성된다.
Your identification has been saved in /home/yegang/.ssh/id_rsa
Your public key has been saved in /home/yegang/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:uJLRfI0Nmua14KxUXZpjQ/2+eUv2naCjw/2JcLo1VCo keygen test.
The key's randomart image is:
+---[RSA 4096]----+
| |
| . |
| o o . |
| o * O .o |
| . X SEoo. |
| O * +o. |
| + = o..+..o |
| . o o=o+=+.o|
| . ++o=+.oo|
+----[SHA256]-----+
yegang@b730469af10e:~$키를 저장한 곳에서 ls 명령어를 사용해보자. 키가 생성된 것을 확인할 수 있다.
yegang@b730469af10e:~$ ls ~/.ssh
id_ed25519 id_ed25519.pub id_rsa id_rsa.pub known_hosts여기서 pub는 공개 키를 뜻한다.
id_rsa: RSA 암호화 알고리즘을 사용하는 개인 키id_rsa.pub: RSA 암호화 알고리즘을 사용하는 공개 키id_ed25519: ED25519 암호화 알고리즘을 사용하는 개인 키id_ed25519.pub: ED25519 암호화 알고리즘을 사용하는 개인 키
공개키를 서버에 복사하기
이제 만들어진 pub 공개키를 서버에 복사한다.
가장 간단한 방법은 ssh-copy-id 명령을 이용하여 복사하는 방법이다.
ssh-copy-id -i [인증서파일] -p [포트] [사용자이름@서버주소]-i [인증서파일]: 공개 키 파일을 지정한다. 위 내용을 따라 만들었다면 id_rsa.pub 파일과 id_ed25519 둘 중 하나를 골라 사용한다.-p [포트]원격지 서버 SSH 포트를 입력한다. 기본값은 22이다.
해당 명령을 실행해보자. 필자의 설정은 다음과 같다.
공개키 위치:
~/.ssh/id_rsa.pub포트:
22사용자이름@서버주소:
root@172.17.0.3
yegang@b730469af10e:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@172.17.0.3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/yegang/.ssh/id_rsa.pub"
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ED25519 key fingerprint is: SHA256:hI7YYTb4Z4HXB2/pvzPGQhQHuew30MCmh6c0rFS8Cxg
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])?연결을 계속 할 지 물어본다. 'yes'를 입력하고 엔터를 누른다.
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.17.0.3's password:원격 서버의 비밀번호를 입력하라고 한다.
비밀번호를 입력하고(화면에 보이지 않음) 엔터 키를 누른다.
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -i /home/yegang/.ssh/id_rsa -p 22 'root@172.17.0.3'"
and check to make sure that only the key(s) you wanted were added.키가 추가되었다.
ssh-copy-id를 사용할 수 없는 경우
보통의 환경이라면 ssh-copy-id를 사용할 수 있겠지만, 환경에 따라 사용할 수 없을 수도 있다. 그런 경우에는 공개키를 직접 복사한 다음에 서버에 접속하여 붙여넣어야 한다.
먼저 공개키의 내용을 확인해 보겠다. cat [파일이름] 으로 내용을 확인할 수 있다.
yegang@b730469af10e:~/.ssh$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJP0sFK5SGQYVqqejAYq7sy9tG9OzUWnkFCO5AYucK5a ecc keygen test.여기서 "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJP0sFK5SGQYVqqejAYq7sy9tG9OzUWnkFCO5AYucK5a ecc keygen test."에 해당하는 내용을 복사한다.
RSA인 경우라도 마찬가지로 ssh-rsa부터 주석까지 복사한다.
그리고 원격 서버에 비밀번호를 입력하여 접속한다.
ssh [사용자이름@서버주소]그 다음, 원격 서버에 접속하여 다음 명령어를 실행한다. vi 편집기는 기본 설치되어 있는데, 설치되어 있지 않다면 sudo apt install vim 명령으로 설치한다. (Linux/Debian)
vi ~/.ssh/authorized_keys그러면 vi 편집기가 실행된다. 공개키를 붙여넣고 저장한다.
i키를 눌러 '입력 모드(-- INSERT --)'에 들어간다.공개키 내용을 붙여넣고 엔터키를 눌러 줄바꿈을 입력한다.
esc키를 눌러 명령 모드로 들어간다.:wq를 입력하고 엔터를 눌러 저장 및 종료한다.cat ~/.ssh/authorized_keys명령을 실행하여 정상적으로 저장이 되었는지 확인한다.
인증키로 서버에 접속하기
이제 "ssh -i [개인키] -p [포트] [사용자이름@서버주소]"를 입력하여 접속할 수 있다.
만약 기본값으로 설정했다면 그냥 ssh [사용자이름@서버주소] -p [포트]만 입력하거나 포트까지 22인 경우 ssh [사용자이름@서버주소]만 입력하면 접속할 수 있다.
yegang@b730469af10e:~$ ssh root@172.17.0.3
Welcome to Ubuntu 26.04 LTS (GNU/Linux 6.10.14-linuxkit aarch64)
댓글
댓글 쓰기