ssh-keygen: SSH 키 생성과 공개 키 등록, ssh-copy-id 사용법

ssh-keygen은 SSH 접속에 쓰는 개인 키와 공개 키 한 쌍을 만들고, 지문 확인과 암호 변경, known_hosts 정리까지 맡는 OpenSSH 명령어입니다. AlmaLinux 9 서버에서 ed25519 키와 rsa 키를 만들어 지문을 확인하고 암호와 주석을 바꾼 뒤 ssh-copy-id의 dry-run으로 확인해 보니, 서버로 건너가는 것은 .pub 파일의 공개 키 한 줄뿐이었습니다.
아래 출력의 계정 이름과 키 파일 경로는 예시 값이고, 지문과 공개 키, randomart는 글을 쓰며 만들었다가 지운 키의 값입니다. 서버에 공개 키를 실제로 등록하는 명령은 명령만 적고 실행하지 않았습니다.
1️⃣ ssh-keygen 키 생성: -t ed25519와 -C 주석
키는 ssh-keygen -t 종류 -C 주석 꼴로 만듭니다. -t는 키 종류이고, -C는 공개 키 끝에 붙는 주석이라 이메일이나 용도를 적습니다. 아래는 저장할 파일을 -f로 지정하고 암호 물음 두 번에 그대로 Enter를 친 전체 출력입니다.
ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| . |
| o o |
| = o . |
| = Soo . |
| = *+*.. . |
| o.B.o++ . |
| .=o*Eo.+ |
| o+=@OO= |
+----[SHA256]-----+암호 물음에서 Enter만 치면 암호 없는 키가 됩니다. -f를 생략하면 암호 물음 앞에 저장할 파일을 묻는 줄이 먼저 나옵니다. 괄호 안에 기본 경로인 홈 폴더 아래 .ssh/id_ed25519가 적혀 있고, 여기서도 Enter만 치면 그 경로에 저장됩니다.
출력 끝의 randomart는 지문을 그림으로 바꾼 것입니다. 키를 만들 때와 -lv로 다시 확인했을 때 같은 그림이 나왔습니다.
ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user 98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pub개인 키는 600, 공개 키는 644 권한으로 만들어졌습니다. 개인 키는 내 컴퓨터에만 두고 밖으로 보내지 않습니다.
cat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com공개 키는 키 종류, 키 값, 주석이 띄어쓰기로 이어진 한 줄입니다. 이 한 줄이 접속할 서버의 authorized_keys에 들어갑니다. 폴더 안 파일의 역할은 트리로 묶었습니다.
2️⃣ ssh-keygen 옵션: -f, -N, -b, -q
물음에 답하며 만드는 방식은 손으로 칠 때는 편하지만, 스크립트에서는 물음 자체를 없애야 합니다. -f로 파일을 정하고 -N으로 암호를 주면 묻지 않고 바로 만들어집니다.
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
| + |
| o + |
| + . |
| . + o |
| . o S ++o |
| . + + B+ |
| .oo * + .=+ |
| E+o* Boo=++. |
| .=.=oo=o++. |
+----[SHA256]-----+-N 뒤에 빈 따옴표를 주면 암호 없는 키가 되고, 물음 없이 저장 위치와 지문까지 한 번에 나왔습니다.
ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?같은 이름으로 다시 실행하면 already exists 뒤에 덮어쓸지 묻습니다. n을 치자 아무것도 바꾸지 않고 종료 코드 1로 끝났습니다. 운영 중인 키를 실수로 덮어쓰지 않게 새 키는 다른 이름으로 만듭니다.
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+. |
|oo.Oo++ |
| .+o+. . |
|.... . |
| .+ o.= S |
| .o+o= + . |
| ++.o . o . |
| . o..o . = . |
| o. . o.o |
+----[SHA256]-----+rsa는 -b로 길이를 정합니다. 매뉴얼 기준 기본값은 3072비트이고, 위에서는 4096비트로 만들어 randomart 머리에 RSA 4096이 찍혔습니다. ed25519는 길이가 정해져 있어 -b를 붙여도 무시된다고 매뉴얼에 적혀 있습니다.
ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*.. |
|o + .*+B== . |
| o ..oB+o.. . |
| . .+.= + |
| = S E o |
| + + o . |
| B + |
| o o |
| ... |
+----[SHA256]-----+-t를 생략하자 ed25519 키가 만들어졌습니다.
ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?rc=0-q를 붙이면 지문과 randomart까지 모두 숨기고 종료 코드만 남습니다. 여러 서버용 키를 스크립트로 만들 때 사용합니다.
📌 주요 옵션: 이 글에서 실행한 결과
| 옵션 | 하는 일 | 이 글에서 본 결과 | |
|---|---|---|---|
| -t 종류 | 만들 키 종류 | 출력 첫 줄에 ed25519, rsa 같은 종류가 나오고, 생략하면 ed25519 | |
| -C 주석 | 공개 키 끝에 붙는 주석 | cat으로 본 공개 키 끝에 user@example.com | |
| -f 파일 | 키 파일 경로 | /home/user/.ssh/deploy_key에 저장되었다는 줄, 같은 이름으로 다시 실행하면 already exists와 Overwrite (y/n)? | |
| -N 암호 | 새 암호(passphrase), 빈 따옴표면 암호 없음 | 암호 물음 없이 저장 위치와 지문까지 한 번에 | |
| -b 비트 | 키 길이 | rsa에 4096을 주면 randomart 머리에 RSA 4096 | |
| -q | 출력을 모두 숨김 | echo로 찍은 rc=0 한 줄만 남음 | |
| -l | 키 파일의 지문 출력 | 공개 키와 개인 키에서 같은 SHA256 지문, authorized_keys는 키마다 한 줄 | |
| -E 해시 | 지문의 해시 종류 지정 | -E md5로 MD5:00:7b:02:5e로 시작하는 지문 | |
| -v | -l과 함께 주면 randomart까지 출력 | 키를 만들 때와 같은 randomart | |
| -y | 개인 키에서 공개 키를 꺼내 출력 | .pub 파일과 글자까지 같은 공개 키 한 줄 | |
| -p | 개인 키의 암호 바꾸기 | 새 암호로 저장되었다는 줄이 나오고, 개인 키가 411바이트에서 464바이트로 | |
| -P 암호 | 옛 암호(지금 걸린 암호) | 맞는 암호는 공개 키, 틀린 암호는 incorrect passphrase supplied to decrypt private key | |
| -c | 주석 바꾸기, 새 주석은 -C로 | Old comment: user@example.com과 Comment 'user@laptop' applied | |
| -F 호스트 | known_hosts에서 그 호스트의 줄 찾기 | # Host 192.0.2.10 found: line 1과 그 줄 | |
| -R 호스트 | known_hosts에서 그 호스트의 줄 지우기 | known_hosts updated와 원래 파일 known_hosts.old, 없는 호스트는 not found | |
| -H | known_hosts의 호스트 이름과 주소를 해시로 | |1|로 시작하는 줄로 바뀌고, .old 파일에 해시 전 줄이 남는다는 WARNING |
📎 그 밖의 옵션: 공식 매뉴얼 기준
| 옵션 | 하는 일 | |
|---|---|---|
| -a 횟수 | 개인 키를 저장할 때 KDF(bcrypt_pbkdf) 반복 횟수, 클수록 암호 확인이 느려지고 무차별 대입에 강해짐, 기본 16 | |
| -A | 없는 호스트 키를 기본 종류(rsa, ecdsa, ed25519)마다 기본 경로에 만듦 | |
| -B | 키 파일의 bubblebabble 다이제스트 출력 | |
| -e | OpenSSH 키를 -m 형식(기본 RFC4716)으로 바꿔 출력, 다른 SSH 프로그램용 | |
| -i | -m 형식(기본 RFC4716)의 암호 없는 키를 OpenSSH 형식으로 바꿔 출력 | |
| -m 형식 | 키 형식 지정(RFC4716, PKCS8, PEM), -p와 함께 OpenSSH와 PEM 개인 키 형식을 서로 바꿈 | |
| -r 호스트 | 공개 키로 그 호스트 이름의 SSHFP DNS 레코드 출력 | |
| -s CA 키 | CA 키로 공개 키에 서명해 인증서 만들기 | |
| -L | 인증서 내용 출력 | |
| -K | FIDO 인증 장치에 저장된 resident 키를 지금 폴더로 내려받음 | |
| -Y sign | SSH 키로 파일에 서명, 서명은 파일 이름 끝에 .sig를 붙여 저장, 용도 이름은 -n으로 |
3️⃣ ssh-keygen -l 지문 확인과 -y 공개 키 추출
키 파일이 여럿이면 어느 공개 키가 어느 개인 키의 짝인지 파일 이름만으로는 알기 어렵습니다. 지문은 개인 키와 공개 키에서 같은 값이 나오므로, -l로 두 파일의 지문을 견주면 짝을 확인할 수 있습니다.
ssh-keygen -l -f ~/.ssh/id_ed25519.pub256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)ssh-keygen -l -f ~/.ssh/id_ed25519256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)공개 키 파일과 개인 키 파일에서 같은 SHA256 지문이 나왔습니다. 앞의 256은 키 길이이고, 끝 괄호는 키 종류입니다.
ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)-E md5를 붙이면 예전 꼴인 MD5 지문으로 바뀝니다. 오래된 서버나 관리 화면이 MD5 지문을 보여 줄 때 대조용으로 사용합니다.
ssh-keygen -lv -f ~/.ssh/id_ed25519.pub256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
| |
| . |
| o o |
| = o . |
| = Soo . |
| = *+*.. . |
| o.B.o++ . |
| .=o*Eo.+ |
| o+=@OO= |
+----[SHA256]-----+-v를 함께 주면 randomart가 다시 나옵니다. 키를 만들 때 출력된 그림과 같은 그림이었습니다.
ssh-keygen -l -f ~/.ssh/authorized_keys256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)authorized_keys처럼 공개 키가 여러 줄인 파일을 주면 줄마다 지문이 한 줄씩 나옵니다. 서버에 어떤 키가 등록되어 있는지 확인할 때 이 방법으로 봅니다.
ssh-keygen -y -f ~/.ssh/id_ed25519ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com-y는 개인 키에서 공개 키를 다시 꺼냅니다. .pub 파일을 지웠거나 다른 컴퓨터로 개인 키만 옮겼을 때 이 출력을 파일로 저장하면 됩니다. 출력은 원래 .pub 파일과 글자까지 같았습니다.
4️⃣ ssh-keygen -p 암호 변경과 -c 주석 변경
개인 키에 암호(passphrase)를 걸면 파일이 유출돼도 암호 없이는 쓰지 못합니다. 대신 접속할 때마다 암호를 쳐야 해서, 사람이 손으로 접속하는 키에 맞고 크론처럼 자동으로 도는 스크립트의 키에는 맞지 않습니다.
ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.-P가 옛 암호, -N이 새 암호입니다. 암호 없던 키라 -P에 빈 따옴표를 주었고, 새 암호로 다시 저장되었다는 두 줄이 나왔습니다. 옵션 없이 -p만 주면 옛 암호와 새 암호를 차례로 묻는다고 매뉴얼에 적혀 있습니다.
ls -l ~/.ssh/id_ed25519-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519암호를 건 뒤 개인 키 파일이 411바이트에서 464바이트로 커졌습니다.
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private key암호가 걸린 키는 -y에도 -P로 암호를 넘겨야 합니다. 맞는 암호로는 전과 같은 공개 키가 나왔고, 틀린 암호를 주자 incorrect passphrase 오류로 끝났습니다. 매뉴얼은 잃어버린 암호를 되찾을 방법이 없다고 밝히고 있어, 암호를 잊으면 새 키를 만들어 공개 키를 다시 등록합니다.
ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"Old comment: user@example.com
Comment 'user@laptop' appliedcat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop-c는 주석을 바꿉니다. 옛 주석과 새 주석이 한 줄씩 나오고, 공개 키 파일 끝의 주석도 user@laptop으로 바뀌었습니다. 주석은 키를 구분하는 표시라 키 값 자체는 그대로였습니다.
ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.암호를 없애려면 -N에 빈 따옴표를 넣습니다. 같은 두 줄이 나오고, 이 뒤로는 -P 없이 -y가 다시 실행되었습니다.
5️⃣ ssh-keygen -R known_hosts 호스트 키 삭제
known_hosts에는 접속했던 서버의 호스트 키가 한 줄씩 쌓입니다. 서버를 다시 설치해 호스트 키가 바뀌면 ssh는 저장된 키와 다르다며 접속을 거절하는데, 이때 옛 줄을 지우는 옵션이 -R입니다. 아래 known_hosts는 예시 주소 세 줄로 만든 파일이고, -f로 그 파일을 지정했습니다.
cat ~/.ssh/known_hosts192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW줄마다 호스트 이름이나 주소, 키 종류, 키 값 순서입니다. 쉼표로 이은 둘째 줄은 이름과 주소가 같은 서버이고, 셋째 줄의 대괄호와 콜론은 22번이 아닌 포트입니다.
ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk-F는 그 호스트의 줄을 몇째 줄인지와 함께 출력합니다. 없는 호스트는 아무것도 출력하지 않고 종료 코드 1로 끝났습니다.
ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.oldcat ~/.ssh/known_hostsserver2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW-R은 그 호스트의 줄을 지우고 원래 파일을 known_hosts.old로 남깁니다. 지운 뒤 두 줄만 남았습니다.
ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hostsHost 192.0.2.99 not found in /home/user/.ssh/known_hostsssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old없는 호스트를 지정하면 not found 한 줄만 나왔습니다. 포트가 다른 서버는 known_hosts에 적힌 대로 대괄호와 포트까지 넣어야 찾습니다.
ssh-keygen -H -f ~/.ssh/known_hostsWARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.oldcat ~/.ssh/known_hosts|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR-H는 호스트 이름과 주소를 해시로 바꿉니다. 파일이 유출돼도 어느 서버에 접속했는지 드러나지 않게 하는 옵션이고, 쉼표로 이었던 이름과 주소는 해시 두 줄로 나뉘었습니다. .old 파일에 해시 전 내용이 남아 있다는 경고도 함께 나왔습니다.
ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR해시된 파일에서도 -F는 이름으로 그 줄을 찾았습니다.
6️⃣ ssh-copy-id 공개 키 등록과 authorized_keys
키를 만들어도 서버가 그 공개 키를 모르면 접속은 여전히 비밀번호로 합니다. 공개 키를 서버에 알리는 자리가 접속할 계정의 ~/.ssh/authorized_keys이고, 이 파일에 .pub 한 줄을 넣는 명령이 ssh-copy-id입니다. 개인 키는 내 컴퓨터에 남고 공개 키 한 줄만 건너갑니다. 아래 다이어그램에서 단계 버튼을 누르면 두 파일이 어디에 놓이는지 보입니다.
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/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: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out-n은 dry-run이라 서버에 아무것도 쓰지 않습니다. 그래도 ssh-copy-id는 먼저 그 키로 로그인을 시도해 이미 등록된 키를 걸러 내는데, 192.0.2.10은 문서용 주소라 연결이 되지 않아 timed out으로 끝났습니다. -o 뒤 옵션은 ssh에 그대로 넘어갑니다.
ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=-f는 이 확인을 건너뛰는 강제 모드입니다. -n과 함께 주자 서버에 들어갈 공개 키 한 줄이 Would have added 아래에 나왔습니다. .pub 파일의 내용과 같은 줄입니다.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10실제 등록은 -n을 뺀 이 명령으로 합니다. ssh-copy-id 스크립트와 매뉴얼 기준으로, 이 명령은 그 계정의 비밀번호를 한 번 묻고, 서버의 ~/.ssh/authorized_keys 끝에 공개 키를 덧붙인 뒤 Number of key(s) added: 1을 출력합니다. 파일과 폴더가 없으면 만들고, 이미 같은 키가 있으면 건너뜁니다.
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10포트가 22번이 아니면 -p로 넘깁니다.
ssh-copy-id가 없는 환경에서는 공개 키 한 줄을 서버의 authorized_keys에 직접 덧붙입니다. 서버에 비밀번호로 로그인한 뒤 아래 순서로 진행합니다. 출력은 같은 서버 안에서 .pub 파일을 덧붙여 확인한 것이고, 다른 서버라면 .pub 파일의 한 줄을 복사해 echo로 덧붙입니다.
mkdir -p ~/.sshchmod 700 ~/.ssh.ssh 폴더가 없으면 만들고 권한을 700으로 맞춥니다.
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keyscat ~/.ssh/authorized_keysssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.comls -l ~/.ssh/authorized_keys-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keysauthorized_keys에 공개 키 한 줄이 들어갔고 권한은 600입니다. sshd는 기본 설정에서 사용자 파일 권한을 먼저 검사해 누구나 쓸 수 있는 권한이면 로그인을 받지 않는다고 sshd_config 매뉴얼의 StrictModes 항목에 적혀 있습니다.
ssh -i ~/.ssh/id_ed25519 user@192.0.2.10등록이 끝나면 개인 키로 접속합니다. 키 이름이 id_ed25519처럼 기본 이름이면 ssh가 알아서 찾고, deploy_key처럼 다른 이름이면 ssh -i 옵션으로 파일을 지정합니다.
🔲 ssh-keygen 명령어 시뮬레이터
아래 시뮬레이터에서 ssh-keygen으로 키를 만들고 지문 확인, 암호 변경, known_hosts 정리, ssh-copy-id까지 직접 입력해 볼 수 있습니다. 지문과 공개 키는 본문과 같은 예시 값이고, ssh-copy-id는 가상 서버에 등록하는 흉내만 냅니다.
🔢 FAQ & 추천 콘텐츠
ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.