ssh-keygen: tạo khóa SSH, đăng ký khóa công khai và cách dùng ssh-copy-id
ssh-keygen là lệnh OpenSSH tạo cặp khóa riêng tư và khóa công khai dùng cho kết nối SSH, đồng thời đảm nhận việc kiểm tra dấu vân tay, đổi passphrase và dọn dẹp known_hosts. Khi tạo khóa ed25519 và rsa trên máy chủ AlmaLinux 9, kiểm tra dấu vân tay, đổi passphrase và chú thích rồi thử ssh-copy-id ở chế độ dry-run, thứ duy nhất được gửi lên máy chủ chỉ là một dòng khóa công khai trong tệp .pub.
Tên tài khoản và đường dẫn tệp khóa trong kết quả bên dưới là giá trị ví dụ, còn dấu vân tay, khóa công khai và randomart là của các khóa được tạo trong lúc viết bài rồi xóa đi. Lệnh thực sự đăng ký khóa công khai lên máy chủ chỉ được ghi ra, không được chạy.
1️⃣ Tạo khóa bằng ssh-keygen: -t ed25519 và chú thích -C
Khóa được tạo theo dạng ssh-keygen -t loại -C chú_thích. -t là loại khóa, còn -C là chú thích gắn ở cuối khóa công khai, thường ghi email hoặc mục đích dùng khóa. Bên dưới là toàn bộ kết quả khi chỉ định tệp bằng -f và nhấn Enter luôn ở cả hai câu hỏi passphrase.
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]-----+Nếu chỉ nhấn Enter ở câu hỏi passphrase, khóa sẽ không có passphrase. Nếu bỏ -f, trước câu hỏi passphrase sẽ hiện trước một dòng hỏi nơi lưu tệp. Trong ngoặc là đường dẫn mặc định .ssh/id_ed25519 trong thư mục home, và chỉ cần nhấn Enter là khóa được lưu vào đó.
randomart ở cuối kết quả là dấu vân tay được chuyển thành hình vẽ. Lúc tạo khóa và lúc kiểm tra lại bằng -lv đều hiện cùng một hình.
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.pubKhóa riêng tư được tạo với quyền 600, khóa công khai với quyền 644. Khóa riêng tư chỉ để trên máy tính của bạn và không gửi đi đâu cả.
cat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comKhóa công khai là một dòng gồm loại khóa, giá trị khóa và chú thích, cách nhau bằng dấu cách. Chính dòng này được đưa vào authorized_keys của máy chủ bạn kết nối tới. Vai trò của từng tệp trong thư mục được gom lại thành cây.
2️⃣ Tùy chọn của ssh-keygen: -f, -N, -b, -q
Cách vừa trả lời câu hỏi vừa tạo khóa tiện khi gõ tay, nhưng trong script thì phải bỏ hẳn các câu hỏi. Chỉ định tệp bằng -f và đưa passphrase bằng -N thì khóa được tạo ngay mà không hỏi gì.
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]-----+Đưa cặp dấu nháy rỗng sau -N thì khóa không có passphrase, và vị trí lưu cùng dấu vân tay hiện ra một lượt mà không có câu hỏi nào.
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)?Chạy lại với cùng tên thì sau already exists sẽ hỏi có ghi đè hay không. Nhấn n thì không có gì thay đổi và lệnh kết thúc với mã thoát 1. Để không lỡ tay ghi đè khóa đang dùng, hãy tạo khóa mới bằng tên khác.
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]-----+Với rsa, -b quy định độ dài. Theo tài liệu hướng dẫn, mặc định là 3072 bit; ở trên khóa được tạo với 4096 bit nên đầu randomart hiện RSA 4096. Tài liệu hướng dẫn ghi rằng ed25519 có độ dài cố định nên -b sẽ bị bỏ qua.
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]-----+Khi bỏ -t, khóa ed25519 được tạo.
ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?rc=0Thêm -q thì mọi thứ đều bị ẩn, kể cả dấu vân tay và randomart, chỉ còn lại mã thoát. Dùng khi script tạo khóa cho nhiều máy chủ.
📌 Tùy chọn chính: kết quả chạy trong bài này
| Tùy chọn | Chức năng | Kết quả trong bài này | |
|---|---|---|---|
| -t loại | Loại khóa sẽ tạo | Dòng đầu của kết quả hiện loại như ed25519, rsa; bỏ qua thì là ed25519 | |
| -C chú_thích | Chú thích gắn ở cuối khóa công khai | user@example.com ở cuối khóa công khai xem bằng cat | |
| -f tệp | Đường dẫn tệp khóa | Dòng báo đã lưu vào /home/user/.ssh/deploy_key; chạy lại với cùng tên thì có already exists và Overwrite (y/n)? | |
| -N passphrase | Passphrase mới; dấu nháy rỗng nghĩa là không có passphrase | Vị trí lưu và dấu vân tay một lượt, không hỏi passphrase | |
| -b bit | Độ dài khóa | Đưa 4096 cho rsa thì đầu randomart hiện RSA 4096 | |
| -q | Ẩn toàn bộ kết quả | Chỉ còn dòng rc=0 in bằng echo | |
| -l | In dấu vân tay của tệp khóa | Cùng một dấu vân tay SHA256 từ khóa công khai và khóa riêng tư; với authorized_keys, mỗi khóa một dòng | |
| -E hash | Chỉ định loại hash của dấu vân tay | Với -E md5, dấu vân tay bắt đầu bằng MD5:00:7b:02:5e | |
| -v | Dùng cùng -l thì in cả randomart | randomart giống lúc tạo khóa | |
| -y | Lấy khóa công khai từ khóa riêng tư rồi in ra | Một dòng khóa công khai giống hệt từng ký tự với tệp .pub | |
| -p | Đổi passphrase của khóa riêng tư | Hiện dòng báo đã lưu với passphrase mới, và khóa riêng tư tăng từ 411 lên 464 byte | |
| -P passphrase | Passphrase cũ (đang đặt hiện tại) | Đúng passphrase thì ra khóa công khai, sai thì ra incorrect passphrase supplied to decrypt private key | |
| -c | Đổi chú thích; chú thích mới đưa bằng -C | Old comment: user@example.com và Comment 'user@laptop' applied | |
| -F máy_chủ | Tìm dòng của máy chủ đó trong known_hosts | # Host 192.0.2.10 found: line 1 và chính dòng đó | |
| -R máy_chủ | Xóa dòng của máy chủ đó khỏi known_hosts | known_hosts updated và tệp gốc known_hosts.old; máy chủ không có thì ra not found | |
| -H | Băm tên máy chủ và địa chỉ trong known_hosts | Các dòng chuyển thành bắt đầu bằng |1|, kèm WARNING rằng tệp .old còn giữ các dòng trước khi băm |
📎 Tùy chọn khác: theo tài liệu hướng dẫn chính thức
| Tùy chọn | Chức năng | |
|---|---|---|
| -a số_vòng | Số vòng KDF (bcrypt_pbkdf) khi lưu khóa riêng tư; càng lớn thì kiểm tra passphrase càng chậm và càng chống được dò mật khẩu kiểu brute force; mặc định 16 | |
| -A | Tạo các khóa máy chủ còn thiếu cho từng loại mặc định (rsa, ecdsa, ed25519) ở đường dẫn mặc định | |
| -B | In bản tóm tắt bubblebabble của tệp khóa | |
| -e | Chuyển khóa OpenSSH sang định dạng -m (mặc định RFC4716) rồi in ra, dùng cho chương trình SSH khác | |
| -i | Chuyển khóa không có passphrase ở định dạng -m (mặc định RFC4716) sang định dạng OpenSSH rồi in ra | |
| -m định_dạng | Chỉ định định dạng khóa (RFC4716, PKCS8, PEM); dùng cùng -p để chuyển khóa riêng tư qua lại giữa định dạng OpenSSH và PEM | |
| -r máy_chủ | In bản ghi DNS SSHFP của tên máy chủ đó từ khóa công khai | |
| -s khóa_CA | Ký khóa công khai bằng khóa CA để tạo chứng chỉ | |
| -L | In nội dung chứng chỉ | |
| -K | Tải các khóa resident lưu trên thiết bị xác thực FIDO về thư mục hiện tại | |
| -Y sign | Ký tệp bằng khóa SSH; chữ ký được lưu với đuôi .sig thêm vào tên tệp, còn tên mục đích đưa bằng -n |
3️⃣ ssh-keygen -l kiểm tra dấu vân tay và -y lấy ra khóa công khai
Khi có nhiều tệp khóa, chỉ nhìn tên tệp thì khó biết khóa công khai nào là cặp của khóa riêng tư nào. Vì dấu vân tay của khóa riêng tư và khóa công khai có cùng giá trị, so dấu vân tay của hai tệp bằng -l là xác nhận được cặp.
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)Tệp khóa công khai và tệp khóa riêng tư cho cùng một dấu vân tay SHA256. Số 256 ở đầu là độ dài khóa, còn phần trong ngoặc ở cuối là loại khóa.
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)Thêm -E md5 thì chuyển sang dấu vân tay MD5 kiểu cũ. Dùng để đối chiếu khi máy chủ cũ hoặc trang quản trị hiển thị dấu vân tay 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]-----+Thêm -v thì randomart hiện lại. Đó là đúng hình đã in ra lúc tạo khóa.
ssh-keygen -l -f ~/.ssh/authorized_keys256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)Nếu đưa tệp có nhiều dòng khóa công khai như authorized_keys, mỗi khóa sẽ ra một dòng dấu vân tay. Đây là cách kiểm tra máy chủ đang đăng ký những khóa nào.
ssh-keygen -y -f ~/.ssh/id_ed25519ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com-y lấy lại khóa công khai từ khóa riêng tư. Nếu đã xóa tệp .pub hoặc chỉ chuyển khóa riêng tư sang máy tính khác, chỉ cần lưu kết quả này vào tệp. Kết quả giống hệt từng ký tự với tệp .pub gốc.
4️⃣ ssh-keygen -p đổi passphrase và -c đổi chú thích
Đặt passphrase cho khóa riêng tư thì dù tệp bị lộ cũng không dùng được nếu không có passphrase. Đổi lại, mỗi lần kết nối phải gõ passphrase, nên hợp với khóa do người dùng kết nối bằng tay, không hợp với khóa của script tự chạy như cron.
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 là passphrase cũ, -N là passphrase mới. Khóa chưa có passphrase nên -P được đưa dấu nháy rỗng, và hiện hai dòng báo đã lưu lại với passphrase mới. Tài liệu hướng dẫn ghi rằng nếu chỉ dùng -p mà không có tùy chọn, lệnh sẽ lần lượt hỏi passphrase cũ và mới.
ls -l ~/.ssh/id_ed25519-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519Sau khi đặt passphrase, tệp khóa riêng tư tăng từ 411 lên 464 byte.
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 keyVới khóa có passphrase, -y cũng cần đưa passphrase bằng -P. Đúng passphrase thì ra khóa công khai giống như trước, sai thì kết thúc với lỗi incorrect passphrase. Tài liệu hướng dẫn nói rõ không có cách khôi phục passphrase đã mất, nên nếu quên thì hãy tạo khóa mới và đăng ký lại khóa công khai.
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 đổi chú thích. Chú thích cũ và mới mỗi cái hiện một dòng, và chú thích ở cuối tệp khóa công khai cũng đổi thành user@laptop. Chú thích chỉ là nhãn để phân biệt khóa nên bản thân giá trị khóa vẫn giữ nguyên.
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.Muốn bỏ passphrase thì đưa dấu nháy rỗng cho -N. Vẫn hiện hai dòng như trên, và từ đó -y lại chạy được mà không cần -P.
5️⃣ ssh-keygen -R xóa khóa máy chủ trong known_hosts
known_hosts tích lũy khóa máy chủ của các máy chủ bạn từng kết nối, mỗi máy một dòng. Nếu cài lại máy chủ và khóa máy chủ thay đổi, ssh sẽ từ chối kết nối vì khóa khác với khóa đã lưu, và tùy chọn xóa dòng cũ chính là -R. known_hosts bên dưới là tệp ba dòng tạo bằng địa chỉ ví dụ, được chỉ định bằng -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+tERrbeFIyExAodSEUhE9j5WMpkRWMỗi dòng gồm tên máy chủ hoặc địa chỉ, loại khóa và giá trị khóa theo thứ tự. Dòng thứ hai nối bằng dấu phẩy là tên và địa chỉ của cùng một máy chủ, còn dấu ngoặc vuông và dấu hai chấm ở dòng thứ ba là cổng khác 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 in dòng của máy chủ đó kèm số thứ tự dòng. Với máy chủ không có, lệnh không in gì và kết thúc với mã thoát 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 xóa dòng của máy chủ đó và giữ tệp gốc thành known_hosts.old. Sau khi xóa chỉ còn lại hai dòng.
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.oldChỉ định máy chủ không có thì chỉ hiện một dòng not found. Máy chủ dùng cổng khác phải ghi cả dấu ngoặc vuông và cổng đúng như trong known_hosts thì mới tìm thấy.
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 băm tên máy chủ và địa chỉ. Đây là tùy chọn giúp dù tệp bị lộ cũng không biết bạn từng kết nối máy chủ nào, và tên với địa chỉ vốn nối bằng dấu phẩy được tách thành hai dòng băm. Cũng hiện cảnh báo rằng tệp .old vẫn còn nội dung trước khi băm.
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/Ix0DhmK4hf1uHCC10TrXyRNgay cả trong tệp đã băm, -F vẫn tìm thấy dòng đó theo tên.
6️⃣ ssh-copy-id đăng ký khóa công khai và authorized_keys
Tạo khóa rồi nhưng nếu máy chủ chưa biết khóa công khai đó thì vẫn phải đăng nhập bằng mật khẩu. Nơi cho máy chủ biết khóa công khai là ~/.ssh/authorized_keys của tài khoản bạn đăng nhập, và lệnh đưa một dòng .pub vào tệp này là ssh-copy-id. Khóa riêng tư ở lại máy tính của bạn, chỉ một dòng khóa công khai được gửi sang. Nhấn các nút bước trong sơ đồ bên dưới để xem hai tệp nằm ở đâu.
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 là dry-run nên không ghi gì lên máy chủ. Dù vậy, ssh-copy-id trước tiên vẫn thử đăng nhập bằng khóa đó để lọc ra các khóa đã đăng ký, và vì 192.0.2.10 là địa chỉ dùng cho tài liệu nên không kết nối được và kết thúc bằng timed out. Các tùy chọn sau -o được chuyển nguyên cho 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 là chế độ ép buộc bỏ qua bước kiểm tra này. Dùng cùng -n thì một dòng khóa công khai sẽ được đưa lên máy chủ hiện ra dưới Would have added. Đó là cùng dòng với nội dung tệp .pub.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10Việc đăng ký thật được làm bằng lệnh này sau khi bỏ -n. Theo script và tài liệu hướng dẫn của ssh-copy-id, lệnh này hỏi mật khẩu của tài khoản đó một lần, thêm khóa công khai vào cuối ~/.ssh/authorized_keys trên máy chủ rồi in Number of key(s) added: 1. Nếu chưa có tệp và thư mục thì tạo mới, nếu đã có cùng khóa thì bỏ qua.
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10Nếu cổng không phải 22 thì truyền bằng -p.
Ở môi trường không có ssh-copy-id, hãy tự thêm một dòng khóa công khai vào authorized_keys trên máy chủ. Đăng nhập máy chủ bằng mật khẩu rồi làm theo thứ tự bên dưới. Kết quả được kiểm tra bằng cách thêm tệp .pub ngay trong cùng máy chủ; nếu là máy chủ khác thì sao chép dòng trong tệp .pub rồi thêm bằng echo.
mkdir -p ~/.sshchmod 700 ~/.sshNếu chưa có thư mục .ssh thì tạo ra và đặt quyền 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_keysMột dòng khóa công khai đã vào authorized_keys với quyền 600. Mục StrictModes trong tài liệu hướng dẫn sshd_config ghi rằng ở cấu hình mặc định, sshd kiểm tra quyền tệp của người dùng trước và không chấp nhận đăng nhập nếu ai cũng ghi được.
ssh -i ~/.ssh/id_ed25519 user@192.0.2.10Đăng ký xong thì kết nối bằng khóa riêng tư. Nếu khóa có tên mặc định như id_ed25519 thì ssh tự tìm thấy, còn nếu là tên khác như deploy_key thì chỉ định tệp bằng tùy chọn ssh -i.
🔲 Trình mô phỏng lệnh ssh-keygen
Trong trình mô phỏng bên dưới, bạn có thể tự gõ ssh-keygen để tạo khóa, kiểm tra dấu vân tay, đổi passphrase, dọn dẹp known_hosts và thử ssh-copy-id. Dấu vân tay và khóa công khai là cùng giá trị ví dụ như trong bài, còn ssh-copy-id chỉ mô phỏng việc đăng ký lên server ảo.
🔢 FAQ & nội dung đề xuất
Windows · Khóa công khai
Cách tạo khóa công khai trong Xshell
Các bước tạo khóa công khai bằng trình hướng dẫn tạo khóa của Xshell, ứng dụng SSH cho Windows, rồi đăng ký lên máy chủ.
SSH · Cài đặt máy chủ
Cấu hình SSH: chức năng và thiết lập của tệp sshd_config
Bài viết về cách thiết lập cổng, đăng nhập root, xác thực bằng khóa công khai và các mục khác trong sshd_config của máy chủ nhận.
Linux · Khái niệm
SSH trên Linux: định nghĩa và thiết lập cơ bản
SSH là gì, khác Telnet thế nào, và cách bật sshd trên máy chủ rồi kiểm tra thiết lập cơ bản.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.