Tạo file cấu hình SSH: cú pháp khối Host, thứ tự ưu tiên và các tùy chọn nên thêm
Công cụ dựng nội dung tệp cấu hình SSH từ danh sách máy chủ bạn khai báo, mỗi máy một khối Host gồm địa chỉ, tên đăng nhập, cổng, tệp khóa và máy trung gian. Kết quả sao chép được hoặc tải về ngay, và toàn bộ nội dung chỉ nằm trong trình duyệt của bạn.
Tính năng nổi bật
- Thêm nhiều máy chủ trong cùng một lần, mỗi máy một thẻ nhập riêng
- Sinh khối Host với tên gọi tắt và dòng HostName tương ứng
- Bỏ qua dòng Port khi cổng là 22, tránh làm tệp cấu hình dài vô ích
- Thêm dòng User khi bạn khai báo tên đăng nhập khác mặc định
- Thêm dòng IdentityFile trỏ tới tệp khóa riêng của từng máy
- Thêm dòng ProxyJump để đi qua máy trung gian trước khi tới máy đích
- Bỏ qua những dòng bạn để trống nên tệp kết quả luôn gọn
- Sao chép toàn bộ nội dung hoặc tải về thành tệp có tên config
Tệp cấu hình SSH tiết kiệm được gì
Ai quản trị vài máy chủ đều biết cảm giác phải gõ một dòng dài gồm tên đăng nhập, địa chỉ IP, cổng khác thường và đường dẫn tệp khóa mỗi lần kết nối, rồi lặp lại điều đó vài chục lần một ngày. Tệp cấu hình SSH gom toàn bộ những tham số đó vào một chỗ và gán cho chúng một tên gọi tắt, để lệnh kết nối rút xuống còn ssh kèm đúng một từ. Lợi ích không dừng ở việc gõ ít hơn. Toàn bộ công cụ dựa trên SSH đều đọc tệp này, nên sau khi khai báo một lần thì lệnh sao chép tệp, lệnh đồng bộ thư mục, lệnh làm việc với kho mã nguồn và cả tính năng kết nối từ xa của trình soạn thảo đều dùng chung tên gọi tắt đó. Ngoài ra tệp cấu hình còn là nơi duy nhất hợp lý để đặt những tùy chọn giữ kết nối không rớt và tái dùng kết nối, thứ mà gõ tay trên dòng lệnh thì gần như không ai làm.
Lợi ích khi sử dụng
- Rút lệnh kết nối dài dòng xuống còn một từ dễ nhớ
- Mọi công cụ dựa trên SSH đều dùng chung tên gọi tắt sau khi khai báo một lần
- Khai báo được nhiều máy trong một lần thay vì soạn thủ công từng khối
- Tệp xuất ra đúng cú pháp nên dán vào là dùng được ngay
- Địa chỉ IP và tên đăng nhập chỉ nằm trong trình duyệt, không gửi lên máy chủ nào
Cách tạo tệp cấu hình SSH
- 1Điền tên gọi tắt vào ô đầu tiên, đây là từ bạn sẽ gõ sau lệnh ssh nên hãy chọn từ ngắn và dễ nhớ.
- 2Điền địa chỉ IP hoặc tên miền thật của máy chủ vào ô kế bên, cùng tên đăng nhập và cổng nếu khác 22.
- 3Điền đường dẫn tệp khóa riêng nếu máy đó dùng khóa riêng, ví dụ dạng đường dẫn bắt đầu bằng dấu ngã trỏ vào thư mục ssh.
- 4Điền tên gọi tắt của máy trung gian vào ô ProxyJump nếu máy đích chỉ vào được qua một máy khác.
- 5Bấm thêm host để khai báo tiếp máy khác, rồi sao chép hoặc tải tệp về và đặt vào thư mục ssh trong thư mục người dùng.
Đặt tệp ở đâu và phân quyền thế nào
Tệp cấu hình cho riêng người dùng nằm ở đường dẫn ssh trong thư mục người dùng, tên tệp đúng là config không có phần mở rộng. Đây là chi tiết hay bị sai khi tải về trên Windows vì hệ thống có thể tự thêm đuôi txt, và khi đó SSH sẽ không đọc tệp. Về quyền, thư mục ssh nên đặt quyền 700 và tệp config nên đặt quyền 600, tức chỉ chủ sở hữu được đọc và ghi. SSH kiểm tra khá nghiêm phần này và sẽ từ chối dùng tệp nếu nó cho phép nhóm hoặc người khác ghi vào, vì một tệp cấu hình bị người khác sửa được là lỗ hổng nghiêm trọng: kẻ tấn công chỉ cần đổi dòng HostName là chuyển hướng kết nối của bạn sang máy của họ. Với các tệp khóa riêng thì quyền bắt buộc là 600, nếu lỏng hơn thì SSH báo lỗi và từ chối dùng khóa. Trên Windows, khi dùng OpenSSH tích hợp sẵn thì đường dẫn tương ứng nằm trong thư mục người dùng và cơ chế quyền theo kiểu Windows, nhưng nguyên tắc vẫn là chỉ tài khoản của bạn được toàn quyền.
Thứ tự các khối quyết định giá trị nào được áp dụng
Đây là quy tắc quan trọng nhất khi viết tệp cấu hình SSH và cũng là quy tắc hay bị hiểu ngược nhất. SSH đọc tệp từ trên xuống, và với mỗi tùy chọn, giá trị đầu tiên tìm được sẽ thắng; những lần khai báo sau cho cùng tùy chọn đó bị bỏ qua hoàn toàn. Đây là điều ngược với trực giác của người quen với các tệp cấu hình nơi khai báo sau ghi đè khai báo trước. Hệ quả thực hành rất cụ thể: các khối riêng cho từng máy phải đặt lên trên, còn khối chung dùng mẫu ký tự đại diện phải đặt xuống cuối cùng. Nếu bạn đặt một khối chung khai báo tên đăng nhập ở đầu tệp, mọi khối riêng phía dưới sẽ không đổi được tên đăng nhập nữa và bạn sẽ mất rất nhiều thời gian để hiểu tại sao. Ngoài ra, tên gọi tắt trong khối Host còn nhận mẫu ký tự đại diện, nên bạn viết được một khối áp dụng cho mọi máy có tên bắt đầu bằng một tiền tố, hoặc mọi máy thuộc một tên miền. Từ bản OpenSSH 7.3 trở đi còn có chỉ thị Include cho phép tách cấu hình ra nhiều tệp nhỏ, rất tiện khi bạn muốn để riêng cấu hình của từng khách hàng.
Các tùy chọn nên thêm tay sau khi tải tệp về
Công cụ sinh ra bộ khung cơ bản, nhưng có mấy dòng đáng thêm vào mà nó chưa hỗ trợ. Đầu tiên là IdentitiesOnly với giá trị yes, đặt kèm mỗi khi bạn khai IdentityFile. Không có dòng này, chương trình quản lý khóa sẽ lần lượt mời tất cả khóa nó đang giữ trước khi tới khóa bạn chỉ định, và nếu bạn có nhiều hơn sáu khóa thì máy chủ sẽ ngắt vì vượt số lần thử xác thực cho phép, báo lỗi quá nhiều lần xác thực thất bại dù khóa đúng vẫn nằm trong máy. Thứ hai là cặp ServerAliveInterval đặt 60 và ServerAliveCountMax đặt 3, giúp phiên làm việc không bị rớt khi bạn để yên vài phút; nguyên nhân rớt thường là thiết bị mạng trung gian đóng kết nối im lặng chứ không phải máy chủ. Thứ ba là bộ tùy chọn tái dùng kết nối gồm ControlMaster đặt auto, ControlPath trỏ tới một đường dẫn tệp tạm và ControlPersist đặt một khoảng thời gian; nhóm này khiến các lần kết nối sau tới cùng máy đi chung một đường hầm đã mở nên gần như tức thì, rất đáng giá khi bạn chạy nhiều lệnh liên tiếp. Thứ tư, trên macOS thì AddKeysToAgent và UseKeychain giúp không phải nhập lại mật khẩu bảo vệ khóa.
ProxyJump và cách đi qua máy trung gian
Trong hạ tầng có kiểm soát, các máy chủ thật thường không mở cổng ra Internet mà chỉ nhận kết nối từ một máy trung gian đặt ở vùng biên. Trước đây người ta phải viết một dòng ProxyCommand khá rối dùng công cụ netcat để làm việc này. Từ bản OpenSSH 7.3, tùy chọn ProxyJump ra đời và thay thế hoàn toàn cách cũ với cú pháp gọn hơn nhiều: bạn chỉ cần ghi tên gọi tắt của máy trung gian vào dòng ProxyJump trong khối của máy đích. Điều quan trọng cần hiểu về cơ chế: kết nối tới máy đích được mã hóa đầu cuối và máy trung gian chỉ chuyển tiếp gói tin chứ không giải mã được nội dung, đồng thời khóa riêng của bạn không bao giờ được sao chép lên máy trung gian. Đây là điểm khác biệt căn bản so với cách làm cũ mà nhiều người vẫn dùng là chép khóa riêng lên máy trung gian rồi từ đó kết nối tiếp; cách đó rất nguy hiểm vì khóa riêng của bạn nằm trên một máy mà nhiều người có quyền truy cập. Nếu cần đi qua nhiều tầng, dòng ProxyJump nhận danh sách nhiều máy phân tách bằng dấu phẩy và SSH sẽ nhảy lần lượt.
Những thứ tuyệt đối không đặt vào tệp cấu hình
Thứ nhất và rõ nhất là mật khẩu. Cấu hình SSH không có tùy chọn nào nhận mật khẩu, và đó là chủ ý chứ không phải thiếu sót; nếu bạn thấy hướng dẫn nào bảo dùng công cụ ngoài để tự động nhập mật khẩu, hãy chuyển sang dùng khóa thay vì đi đường vòng đó. Thứ hai là tùy chọn StrictHostKeyChecking đặt thành no. Nhiều người thêm dòng này cho đỡ bị hỏi xác nhận khi kết nối lần đầu, nhưng nó tắt luôn cơ chế phát hiện kẻ đứng giữa: khi khóa máy chủ đổi vì có người chen vào giữa, SSH sẽ im lặng kết nối thay vì cảnh báo. Nếu thật sự cần bỏ bước hỏi cho môi trường tự động dùng máy ảo tạm, hãy dùng giá trị accept-new thay vì no, vì nó chỉ tự chấp nhận máy hoàn toàn mới và vẫn cảnh báo khi khóa của một máy đã biết bị đổi. Thứ ba, cân nhắc kỹ trước khi bật chuyển tiếp tác nhân khóa: khi bật, người có quyền quản trị trên máy bạn đang kết nối tới có thể mượn khóa của bạn trong lúc phiên còn mở, nên chỉ bật với những máy bạn thực sự tin tưởng. Cuối cùng, nhớ rằng tệp cấu hình là bản đồ hạ tầng của bạn, đừng đưa nó lên kho mã nguồn công khai.
Câu hỏi thường gặp (FAQ)
Tệp cấu hình đặt ở đâu và tên gì?
Đặt trong thư mục ssh nằm trong thư mục người dùng của bạn, tên tệp đúng là config không có phần mở rộng. Trên Windows hãy kiểm tra kỹ vì hệ thống có thể tự thêm đuôi txt khi tải về, và khi đó SSH sẽ không đọc được tệp.
Cần đặt quyền cho tệp thế nào?
Thư mục ssh nên đặt quyền 700 và tệp config nên đặt 600, tức chỉ chủ sở hữu đọc và ghi được. SSH từ chối dùng tệp nếu nhóm hoặc người khác ghi được, vì kẻ tấn công chỉ cần sửa dòng HostName là chuyển hướng được kết nối của bạn sang máy của họ.
Khi có nhiều khối trùng nhau thì khối nào được áp dụng?
Với mỗi tùy chọn, giá trị đầu tiên tìm được từ trên xuống sẽ thắng, các khai báo sau bị bỏ qua. Đây là điều ngược với nhiều loại tệp cấu hình khác, nên hãy đặt các khối riêng cho từng máy lên trên và khối chung dùng ký tự đại diện xuống cuối cùng.
Vì sao khai IdentityFile rồi mà vẫn báo quá nhiều lần xác thực thất bại?
Vì chương trình quản lý khóa lần lượt mời tất cả khóa nó đang giữ trước khi tới khóa bạn chỉ định, và máy chủ ngắt kết nối sau một số lần thử nhất định, mặc định là sáu. Cách sửa là thêm dòng IdentitiesOnly với giá trị yes vào khối đó để chỉ dùng đúng khóa bạn khai báo.
Kết nối hay bị rớt khi để yên vài phút thì khắc phục thế nào?
Thêm ServerAliveInterval đặt 60 và ServerAliveCountMax đặt 3 vào khối cấu hình. Hai dòng này khiến máy khách gửi tín hiệu định kỳ để giữ kết nối, vì nguyên nhân rớt thường là thiết bị mạng trung gian đóng kết nối im lặng chứ không phải máy chủ ngắt.
ProxyJump dùng khi nào?
Khi máy đích không nhận kết nối trực tiếp từ Internet mà chỉ nhận từ một máy trung gian ở vùng biên. Bạn ghi tên gọi tắt của máy trung gian vào dòng ProxyJump trong khối của máy đích, và SSH sẽ tự nhảy qua. Cần OpenSSH từ bản 7.3 trở lên.
Dùng ProxyJump có phải chép khóa riêng lên máy trung gian không?
Không, và đây chính là ưu điểm lớn nhất của nó. Khóa riêng của bạn không rời khỏi máy bạn, còn máy trung gian chỉ chuyển tiếp gói tin đã mã hóa chứ không đọc được nội dung phiên. Cách cũ là chép khóa lên máy trung gian thì rất nguy hiểm vì nhiều người có quyền truy cập máy đó.
Có đặt mật khẩu vào tệp cấu hình được không?
Không. Cấu hình SSH không có tùy chọn nào nhận mật khẩu và đó là chủ ý về mặt an toàn. Cách đúng là dùng khóa công khai thay cho mật khẩu, và nếu khóa có mật khẩu bảo vệ thì dùng chương trình quản lý khóa để không phải nhập lại mỗi lần.
Đặt StrictHostKeyChecking thành no có sao không?
Có, nó tắt cơ chế phát hiện kẻ đứng giữa: khi khóa máy chủ đổi vì có người chen vào, SSH sẽ im lặng kết nối thay vì cảnh báo. Nếu cần bỏ bước hỏi cho môi trường tự động, hãy dùng giá trị accept-new vì nó chỉ tự chấp nhận máy mới hoàn toàn và vẫn cảnh báo khi khóa của máy đã biết bị đổi.
Vì sao tệp sinh ra không có dòng Port?
Vì công cụ bỏ qua dòng Port khi giá trị là 22, vốn đã là cổng mặc định của SSH nên khai báo lại chỉ làm tệp dài thêm. Khi bạn nhập một cổng khác, dòng Port sẽ xuất hiện trong khối tương ứng.
Có bật được chuyển tiếp tác nhân khóa từ công cụ không?
Không, biểu mẫu hiện chưa có ô cho tùy chọn này nên tệp sinh ra không bao giờ chứa dòng ForwardAgent. Nếu cần, bạn thêm tay sau khi tải tệp về, nhưng hãy cân nhắc kỹ vì người có quyền quản trị trên máy đích có thể mượn khóa của bạn trong lúc phiên còn mở.
Thông tin máy chủ tôi nhập có bị gửi đi đâu không?
Không. Toàn bộ việc ghép chuỗi và tạo tệp chạy bằng JavaScript trong trình duyệt của bạn, không có bước gọi máy chủ. Dù vậy, tệp cấu hình là bản đồ hạ tầng của bạn nên sau khi tải về hãy giữ nó cẩn thận và đừng đưa lên kho mã nguồn công khai.
Từ khóa liên quan
- ssh config là gì
- tạo file ssh config
- cấu hình ssh config host
- ssh không cần gõ ip
- identityfile trong ssh config
- identitiesonly yes
- lỗi too many authentication failures
- proxyjump ssh
- bastion host là gì
- serveraliveinterval giữ kết nối ssh
- ssh controlmaster tái dùng kết nối
- phân quyền 600 cho ssh config
- ssh config trên windows
- include trong ssh config
- ssh nhiều key cho nhiều server
- stricthostkeychecking accept-new
- forwardagent có an toàn không
- ssh key ed25519
- kết nối server qua ssh nhanh hơn
- quản lý nhiều server bằng ssh
