SSH - Cheatsheet
Cheatsheet này cung cấp các hướng dẫn về việc sử dụng SSH.
🔖 Gợi ý từ Admin
📝 Tài liệu phỏng vấn kiến thức lập trình: Xem tại đây!!!
📌 Tìm hiểu về thuật toán: Xem tại đây!!!
📌 Roadmaps - Lộ trình trở thành một lập trình viên: Xem tại đây!!!
⚡️ Cheatsheet các ngôn ngữ lập trình: Xem tại đây!!!
⚡️ Handbook lập trình: Xem tại đây!!!
I. Tổng hợp SSH Cheatsheet
1. Cơ bản
⚡️ Kết nối (Connecting)
# Kết nối đến một máy chủ (cổng mặc định là 22)
$ ssh [email protected]
# Kết nối thông qua một cổng cụ thể
$ ssh [email protected] -p 6222
# Kết nối qua tệp pem (với quyền 0400)
$ ssh -i /path/file.pem [email protected]
Lưu ý: Thay thế root
, 192.168.1.5
, 6222
, và /path/file.pem
bằng thông tin thực tế.
⚡️ Kết nối (Executing)
# Kết nối đến một máy chủ (cổng mặc định là 22)
$ ssh [email protected]
# Kết nối thông qua một cổng cụ thể
$ ssh [email protected] -p 6222
# Kết nối qua tệp pem (với quyền 0400)
$ ssh -i /path/file.pem [email protected]
⚡️ Tập tin và khóa cấu hình SSH
Tập tin/Thư mục | Mô tả |
---|---|
/etc/ssh/ssh_config | Cấu hình toàn hệ thống |
~/.ssh/config | Cấu hình riêng của người dùng |
~/.ssh/id_{type} | Khóa riêng |
~/.ssh/id_{type}.pub | Khóa công khai |
~/.ssh/known_hosts | Host đã đăng nhập |
~/.ssh/authorized_keys | Khóa đăng nhập được ủy quyền |
⚡️ Các tùy chọn SCP
Tùy chọn | Mô tả |
---|---|
scp -r | Sao chép đệ quy toàn bộ thư mục |
scp -C | Nén dữ liệu |
scp -v | Hiển thị thông tin chi tiết |
scp -P 8080 | Sử dụng một Cổng cụ thể |
scp -B | Chế độ hàng loạt (Ngăn mật khẩu) |
scp -p | Bảo toàn thời gian và chế độ |
⚡️ SCP: "Secure Copy Protocol" hoặc "Secure Copy Program". Đây là một giao thức và một tiện ích trong Unix và các hệ điều hành tương tự như Linux, được thiết kế để truyền tệp qua mạng một cách bảo mật. SCP sử dụng SSH (Secure Shell) để mã hóa dữ liệu trước khi truyền đi, giúp đảm bảo tính an toàn của thông tin trong quá trình truyền tệp từ một máy chủ đến máy tính khác. Điều này làm cho SCP trở thành một cách an toàn và hiệu quả để chuyển tệp giữa các máy chủ hoặc từ máy tính cá nhân lên máy chủ.
# Sao chép từ xa về máy local
$ scp user@server:/dir/file.ext dest/
# Sao chép giữa hai máy chủ
$ scp user@server:/file user@server:/dir
# Sao chép từ local lên xa
$ scp dest/file.ext user@server:/dir
# Sao chép một thư mục đầy đủ
$ scp -r user@server:/dir dest/
# Sao chép tất cả các tệp từ một thư mục
$ scp user@server:/dir/* dest/
# Sao chép từ một thư mục trên máy chủ về thư mục hiện tại
$ scp user@server:/dir/* .
⚡️ Config mẫu
# Máy chủ server1
HostName 192.168.1.5
User root
Port 22
IdentityFile ~/.ssh/server1.key
# Kích hoạt bằng tên viết tắt
$ ssh server1
👉 Xem thêm: Full Config Options
⚡️ ProxyJump: trong SSH được sử dụng để thiết lập một kết nối SSH thông qua một hoặc nhiều máy chủ trung gian (proxy). Điều này hữu ích khi bạn cần kết nối đến một máy chủ từ xa thông qua các máy chủ trung gian để bảo mật hoặc vượt qua các tường lửa mạng.
# Thiết lập một kết nối SSH đến remote_host2 thông qua proxy_host1.
$ ssh -J proxy_host1 remote_host2
# Sử dụng tài khoản user khi kết nối đến cả proxy_host1 và remote_host2.
$ ssh -J user@proxy_host1 user@remote_host2
# Thiết lập kết nối đa bước, điều này có nghĩa là truyền qua nhiều máy chủ trung gian (proxy_host1 và proxy_host2) trước khi đến remote_host3.
$ ssh -J user@proxy_host1:port1,user@proxy_host2:port2 user@remote_host3
⚡️ ssh-copy-id: được sử dụng để sao chép khóa công khai của người dùng lên máy chủ từ xa, làm cho quá trình xác thực bằng khóa có thể thực hiện mà không cần mật khẩu. Nó giúp thêm khóa công khai vào tệp ~/.ssh/authorized_keys trên máy chủ từ xa.
# Sao chép khóa công khai mặc định của người dùng hiện tại lên máy chủ từ xa server.
$ ssh-copy-id user@server
# Sao chép khóa công khai mặc định của người dùng hiện tại lên máy chủ từ xa với tên định danh là server1.
$ ssh-copy-id server1
# Sao chép một khóa công khai cụ thể (trong ví dụ này là id_rsa.pub) từ đường dẫn đã chỉ định lên máy chủ từ xa.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
2. SSH keygen
⚡️ ssh-keygen: được sử dụng để tạo cặp khóa SSH (khóa công khai và khóa riêng tư).
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"
-t Loại khóa
-b Số bit trong khóa
-C Thêm một comment mới
# Tạo một khóa RSA 4096 bit với địa chỉ email làm comment
-t rsa
: Chọn loại khóa là RSA.-b 4096
: Chọn số bit trong khóa là 4096 bit, đây là một độ dài khóa mạnh mẽ và an toàn.-C "[email protected]"
: Cung cấp một comment mới cho khóa, thường là địa chỉ email để nhận biết.
Sau khi chạy lệnh này, khóa công khai (id_rsa.pub
) và khóa riêng tư (id_rsa
) sẽ được tạo trong thư mục ~/.ssh/
. Khóa công khai có thể được chia sẻ với các máy chủ để xác thực, trong khi khóa riêng tư được giữ một cách an toàn trên máy local.
⚡️ known_hosts
Trong quản lý SSH, tệp known_hosts
lưu trữ các khóa host của các máy chủ đã được xác thực trước đó. Các tùy chọn trên được sử dụng để tìm kiếm và xóa các bản ghi từ known_hosts
:
# Tìm kiếm từ known_hosts
$ ssh-keygen -F <ip/hostname>
# Xóa từ known_hosts
$ ssh-keygen -R <ip/hostname>
ssh-keygen -F <ip/hostname>
: Tìm kiếm bản ghi trongknown_hosts
dựa trên địa chỉ IP hoặc tên máy chủ. Nếu tìm thấy, nó sẽ hiển thị thông tin của bản ghi đó.ssh-keygen -R <ip/hostname>
: Xóa bản ghi trongknown_hosts
dựa trên địa chỉ IP hoặc tên máy chủ. Khi bạn kết nối đến một máy chủ mới và muốn xác thực, bản ghi mới sẽ được thêm vàoknown_hosts
.
⚡️ Tạo key (Generate)
# Tạo một key theo cách tương tác
$ ssh-keygen
# Chỉ định tên tệp
$ ssh-keygen -f ~/.ssh/filename
# Tạo public key từ private key
$ ssh-keygen -y -f private.key > public.pub
# Thay đổi comment
$ ssh-keygen -c -f ~/.ssh/id_rsa
# Thay đổi passphrase của private key
$ ssh-keygen -p -f ~/.ssh/id_rsa
ssh-keygen
: Tạo một cặp khóa mới theo cách tương tác. Bạn sẽ được hỏi về nơi lưu trữ khóa và passphrase (nếu có).ssh-keygen -f ~/.ssh/filename
: Chỉ định tên tệp khi tạo khóa.ssh-keygen -y -f private.key > public.pub
: Tạo public key từ private key.ssh-keygen -c -f ~/.ssh/id_rsa
: Thay đổi comment của khóa.ssh-keygen -p -f ~/.ssh/id_rsa
: Thay đổi passphrase của private key.
⚡️ Loại khoá (Key type)
rsa
ed25519
dsa
ecdsa
- RSA (Rivest-Shamir-Adleman): RSA là một thuật toán mật mã sử dụng cặp khóa công khai và riêng tư. Khóa công khai được sử dụng để mã hóa dữ liệu, trong khi khóa riêng tư được sử dụng để giải mã dữ liệu. RSA thường được sử dụng cho chữ ký số, trao đổi khóa an toàn, và mã hóa thông tin.
- Ed25519: Là một thuật toán chữ ký số sử dụng đường cong elliptic (EdDSA) trên trường số nguyên modulo 2^255 - 19. Nó mang lại hiệu suất cao và độ an toàn mạnh mẽ, đặc biệt là trong ngữ cảnh của việc xác thực.
- DSA (Digital Signature Algorithm): DSA là một thuật toán chữ ký số sử dụng đường cong elliptic để tạo chữ ký và xác minh chữ ký số. Nó thường được sử dụng trong quá trình chứng thực và trao đổi khóa.
- ECDSA (Elliptic Curve Digital Signature Algorithm): Giống như DSA, nhưng ECDSA sử dụng đường cong elliptic thay vì số nguyên lớn để tạo và xác minh chữ ký số. Nó được sử dụng trong các giao thức mạng an toàn như SSH và TLS.
⚡️ Định dạng khoá (Key format)
PEM
PKCS8
- PEM (Privacy Enhanced Mail): PEM là một chuẩn được sử dụng để biểu diễn dữ liệu nhị phân trong dạng văn bản. Trong bối cảnh khóa, định dạng PEM thường được sử dụng để lưu trữ khóa riêng tư và khóa công khai dưới dạng văn bản, giúp dễ dàng đọc và chia sẻ.
- PKCS8 (Public-Key Cryptography Standards #8): PKCS8 là một chuẩn định dạng cho lưu trữ khóa riêng tư trong ngữ cảnh của hệ thống quản lý khóa. Nó định nghĩa cách bao gồm khóa riêng tư và thông tin liên quan như thuật toán mã hóa trong một cấu trúc định dạng chuẩn.