Nếu bạn thường xuyên kết nối đến nhiều hệ thống từ xa thông qua giao thức SSH, bạn sẽ gặp khó khăn khi nhớ tất cả địa chỉ IP từ xa, tên người dùng khác nhau, các cổng không chuẩn và các tùy chọn dòng lệnh phức tạp.
Một cách giải quyết có thể là tạo các bí danh bash cho mỗi kết nối máy chủ từ xa. Tuy nhiên, còn một cách giải quyết khác, đó là sử dụng một tệp config cá nhân cho mỗi người dùng trong OpenSSH, nơi bạn có thể lưu trữ các tùy chọn SSH khác nhau cho mỗi máy chủ từ xa mà bạn kết nối.
Bài viết này sẽ trình bày về các khái niệm cơ bản về tệp cấu hình của SSH client và giải thích một số tùy chọn cấu hình phổ biến nhất.
Cấu trúc file config SSH
Host hostname1
SSH_OPTION value
SSH_OPTION value
Host hostname2
SSH_OPTION value
Host *
SSH_OPTION value
File được tổ chức thành các phần (sections). Mỗi phần bắt đầu bằng chỉ thị Host và chứa các tùy chọn SSH cụ thể được sử dụng khi thiết lập kết nối với máy chủ SSH từ xa. Việc thụt vào không bắt buộc nhưng được khuyến khích vì nó làm cho tệp trở nên dễ đọc hơn.
Chỉ thị Host có thể chứa một mẫu hoặc một danh sách các mẫu cách nhau bằng khoảng trắng. Mỗi mẫu có thể không có hoặc nhiều ký tự không phải khoảng trắng hoặc một trong các bộ chỉ thị mẫu sau:
- * (dấu sao): Phù hợp với không hoặc nhiều ký tự. Ví dụ, Host * phù hợp với tất cả các máy chủ, trong khi 192.168.0.* phù hợp với các máy chủ trong mạng con 192.168.0.0/24
- ? (hỏi chấm): – Phù hợp chính xác với một ký tự. Ví dụ, mẫu Host 10.10.0.? phù hợp với tất cả các máy chủ trong phạm vi 10.10.0.[0-9]
- ! (chấm than): – Khi sử dụng ở đầu một mẫu, nó đảo ngược kết quả phù hợp. Ví dụ, Host 10.10.0.* !10.10.0.5 phù hợp với bất kỳ máy chủ nào trong mạng con 10.10.0.0/24 ngoại trừ 10.10.0.5
Ví dụ
Thường thì, khi kết nối tới một máy chủ từ xa qua SSH, bạn sẽ chỉ định username, ip và port. Ví dụ, để đăng nhập với tên người dùng john vào máy chủ có tên dev.example.com trên cổng 2322 từ dòng lệnh, bạn sẽ gõ:
ssh -p 2322 john@dev.example.com
Để kết nối tới máy chủ với các tùy chọn như đã cung cấp trong lệnh ở trên mà chỉ cần gõ ssh dev
, hãy thêm các dòng sau vào tệp ~/.ssh/config
của bạn:
~/.ssh/config
Host dev
HostName dev.example.com
User john
Port 2322
Bây giờ khi bạn gõ ssh dev
, máy client SSH sẽ đọc tệp cấu hình và sử dụng các thông tin kết nối được chỉ định cho máy chủ dev
:
ssh dev
File config SSH dùng chung
Hãy xem ví dụ file config sau
Host targaryen
HostName 192.168.1.10
User daenerys
Port 7654
IdentityFile ~/.ssh/targaryen.key
Host tyrell
HostName 192.168.10.20
Host martell
HostName 192.168.10.50
Host *ell
user oberyn
Host * !martell
LogLevel INFO
Host *
User root
Compression yes
Khi bạn gõ ssh targaryen
, SSH Client đọc tệp và áp dụng các tùy chọn từ khối phù hợp đầu tiên, tức là Host targaryen. Tiếp theo, nó kiểm tra từng khối tiếp theo để tìm một mẫu khớp. Mẫu khớp tiếp theo là Host * !martell (nghĩa là tất cả các máy chủ trừ martell), và nó sẽ áp dụng tùy chọn kết nối từ khối này. Định nghĩa cuối cùng Host * cũng khớp, nhưng SSH Client sẽ chỉ lấy tùy chọn Compression vì tùy chọn User đã được định nghĩa trong khối Host targaryen.
Danh sách đầy đủ các tùy chọn được sử dụng khi bạn gõ ssh targaryen
như sau:
- HostName 192.168.1.10
- User daenerys
- Port 7654
- IdentityFile ~/.ssh/targaryen.key
- LogLevel INFO
- Compression yes
Override SSH Config File
SSH Client đọc cấu hình của nó theo thứ tự ưu tiên sau:
- Các tùy chọn được chỉ định từ command line.
- Các tùy chọn được xác định trong tệp
~/.ssh/config
. - Các tùy chọn được xác định trong tệp
/etc/ssh/ssh_config
.
Tùy chọn -F (configfile) cho phép bạn chỉ định một tệp cấu hình tùy chọn dành riêng cho người dùng.
Để yêu cầu SSH Client bỏ qua tất cả các tùy chọn được chỉ định trong tệp cấu hình SSH, sử dụng:
ssh -F /dev/null user@example.com