SSH (Secure Shell) thường được sử dụng để truy cập các máy chủ Linux / Unix từ xa. Để truy cập vào một máy chủ từ xa, yêu cầu một người phải khai báo tên người dùng, tên máy chủ hoặc địa chỉ IP và mật khẩu hoặc trong hầu hết các trường hợp, key ssh được sử dụng để cải thiện bảo mật. Nếu bạn chỉ xử lý một máy chủ từ xa, bạn chỉ cần chạy cú pháp ssh để truy cập vì bạn sẽ dễ dàng nhớ địa chỉ IP hoặc tên máy chủ. Tuy nhiên, khi nói đến việc quản lý một số máy chủ từ xa, điều quan trọng là phải có công cụ quản lý kết nối ssh trên Linux sẽ giúp bạn không phải nắm vững tất cả các máy chủ từ xa và thông tin đăng nhập của chúng. Trong trường hợp này, tệp cấu hình ssh sẽ giải cứu cho chúng ta.
Để có thể sử dụng tệp cấu hình ssh, chúng tôi cần cài đặt ssh trong hệ thống của bạn. Hầu hết các máy chủ Linux đều có ssh đã được cài đặt. Các tệp của nó được lưu trữ trong thư mục ~/.ssh.
$ ls -l ~/.ssh/
total 16
-rw-------. 1 lorna lorna 2602 Jul 21 17:23 id_rsa
-rw-r--r--. 1 lorna lorna 566 Jul 21 17:23 id_rsa.pub
-rw-------. 1 lorna lorna 1505 Jul 21 17:24 known_hosts
-rw-------. 1 lorna lorna 759 Jul 21 17:24 known_hosts.old
Như bạn có thể thấy thư mục chứa một số tệp như được mô tả bên dưới:
- id_rsa – lưu trữ private key để xác thực quyền truy cập từ xa bằng key ssh
- id_rsa.pub – lưu trữ public key
- known_hosts – Lưu trữ public keys cho tất cả các máy chủ đã được kết nối.
Trong thư mục này, chúng ta có thể tạo một tệp cấu hình ssh xác định tất cả các máy chủ, tên máy chủ, tên người dùng và mật khẩu của chúng, được gọi là cấu hình. Không có giới hạn về số lượng hồ sơ bạn có thể tạo. Điều này sẽ cho phép chúng tôi dễ dàng quản lý kết nối ssh trên Linux và tránh phải nhớ tất cả. Trong trường hợp bình thường, tôi sẽ kết nối với máy chủ Linux từ xa bằng cú pháp dưới đây
$ ssh user@remote-ip
#Example
$ ssh root@192.168.50.2
Trong trường hợp trên, chúng tôi đang chuyển tên user từ xa và địa chỉ IP hoặc tên máy chủ. Cổng mặc định cho ssh là 22 mà chúng tôi không phải ghi. Nếu chúng tôi đang sử dụng một cổng khác, chúng tôi sẽ sử dụng flag -p sau đó là số cổng như được hiển thị.
ssh user@remote-ip -p 20222
Tạo tệp cấu hình người dùng SSH
Bây giờ, hãy tạo một tệp cấu hình (nếu chưa tồn tại) với một cấu hình cho kết nối ở trên và xem sự khác biệt là kết nối
touch ~/.ssh/config
Bạn có thể cần đặt quyền cho tệp cấu hình
chmod 600 ~/.ssh/config
Thêm nội dung bên dưới vào tệp
$ vim ~/.ssh/config
Host server1
Hostname 192.168.50.2
user root
port 20222
Ở đâu:
- server1 là tên bí danh của máy chủ từ xa được sử dụng để ssh
- 192.168.50.2 là địa chỉ IP của hệ thống từ xa
- root là tên của tài khoản người dùng trong hệ thống từ xa mà chúng tôi sẽ đăng nhập.
- 20222 là cổng dịch vụ SSH được định cấu hình trên hệ thống từ xa
Sau khi bạn lưu tệp, hãy kết nối với server1 như bên dưới. Sau đó, bạn sẽ được nhắc nhập mật khẩu.
ssh server1
Như bạn thấy, chúng tôi chỉ phải nhớ tên profile. SSH sẽ tìm kiếm thông tin thích hợp trong tệp cấu hình và sử dụng các tham số đã xác định để truy cập. Bạn có thể thêm nhiều cấu hình như bên dưới:
Host server1
Hostname 192.168.50.2
User root
Port 20222
Host server2
Hostname 192.168.50.3
User user1
Port 20223
Host server3
Hostname 192.168.50.4
User user2
Port 20224
Chuyển một tham số chung cho tất cả các máy chủ trong tệp người dùng SSH
Nếu tham số của chúng áp dụng cho tất cả các máy chủ, bạn có thể chuyển nó bằng cách sử dụng * như được hiển thị bên dưới ở cuối tệp. Trong trường hợp này, giả sử rằng người dùng đăng nhập từ xa cho tất cả các nút là lorna. Bạn có thể thêm tất cả các tham số mặc định mà bạn đang sử dụng.
Host *
user lorna
Ghi đè thông số tệp cấu hình người dùng SSH
Nếu bạn đã khai báo một tham số trong tệp cấu hình và có thể bạn muốn sử dụng một tham số khác nhưng không thay đổi cài đặt cấu hình, bạn có thể ghi đè bằng cách sử dụng flag -o. Ví dụ: giả sử máy chủ từ xa ở trên có nhiều hơn một người dùng đăng nhập và bạn đã khai báo một người dùng trong tệp cấu hình, để sử dụng người dùng khác, lệnh như sau:
ssh -o "User=lorna" server1
Đặt key Identity trong tệp cấu hình người dùng SSH
Nếu bạn đang kết nối với các máy chủ từ xa bằng cách sử dụng key ssh thay vì mật khẩu, bạn có thể khai báo phần này thành private key như hình dưới đây. Hãy nhớ rằng bạn không thể lưu mật khẩu trong tệp cấu hình và bạn nên sử dụng key ssh để truy cập từ xa.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
Chỉ nhận dạng tệp người dùng SSH
Mặc dù đã xác định đường dẫn đến các identity key như trong cấu hình trên, ssh vẫn sẽ đi qua các danh tính có sẵn cho đến khi tìm thấy một key phù hợp. Điều này thường dẫn đến các lỗi xác thực tăng lên theo số lượng danh tính có sẵn. Để yêu cầu ssh chỉ sử dụng key được chỉ định, chúng tôi sử dụng tham số IdentitiesOnly như hình dưới đây:
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Tệp người dùng SSH UserKeychain
Nếu xác thực key ssh của bạn yêu cầu mật khẩu, bạn có thể sử dụng UserKeyChain để cho phép bạn chỉ nhập mật khẩu lần đầu tiên và nó sẽ được lưu trong chuỗi khóa macOS hoặc Gnome keyring.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKeychain yes
Đặt tệp máy chủ đã biết của người dùng
Tệp máy chủ đã biết cho phép máy khách xác thực các máy chủ từ xa. Nó chứa một danh sách các khóa cho các máy chủ từ xa mà người dùng đã kết nối. Điều này giúp người dùng đảm bảo rằng họ không kết nối sai các máy chủ từ xa. Bất kỳ khi nào bạn thực hiện kết nối ssh với một máy chủ từ xa, nó sẽ hiển thị cho bạn khóa công khai và bằng chứng về khóa cá nhân tương ứng.
Các dấu vân tay của máy chủ từ xa được thêm vào tệp know_hosts, nếu bạn chưa có chúng, để mỗi khi bạn truy cập vào cùng một máy chủ, nó sẽ được xác minh dựa trên dấu vân tay hiện có. Đây là lý do tại sao nếu bạn cài đặt lại máy chủ từ xa và cố gắng truy cập lại vào nó, bạn sẽ nhận được cảnh báo về dấu vân tay không xác định vì nó có thể đã thay đổi trong quá trình cài đặt lại. Việc kiểm tra này được thực thi bằng cách sử dụng thông số Kiểm tra nghiêm ngặt. Bạn cũng có thể chuyển đường dẫn tệp máy chủ lưu trữ đã biết.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/known_hosts
StrictHostKeyChecking yes
Host server2
Hostname 192.168.50.3
User root
Port 2022
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
StrictHostKeyChecking no
Thời gian chờ kết nối SSH (SSH Connection Time Out) và khoảng thời gian tồn tại của máy chủ (Server Alive Interval)
Nếu máy khách người dùng kết nối với máy chủ từ xa vẫn không hoạt động, họ nên kết nối lại. Phiên chỉ vẫn hoạt động khi người dùng đang làm việc trong máy chủ. Thời gian chờ kết nối xác định khoảng thời gian người dùng không hoạt động trước khi hết thời gian phiên. Tham số được sử dụng để xác định thời gian chờ kết nối là ServerAliveCountMax. Mặt khác, ServerAliveInterval xác định các khoảng thời gian mà ssh gửi gói tin để kiểm tra tính khả dụng của máy chủ.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/known_hosts
#UserKnownHostsFile /dev/null
StrictHostKeyChecking yes
ServerAliveInterval 60
ServerAliveCountMax 720
Cấp độ nhật ký tệp cấu hình người dùng SSH
Tham số LogLevel xác định phần mở rộng chi tiết của nhật ký ssh ở phía máy khách. Hầu hết các giá trị thường được sử dụng là ERROR, FATAL, QUIET, VERBOSE, INFO, DEBUG1,..v..v.
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
UserKnownHostsFile ~/.ssh/known_hosts
StrictHostKeyChecking yes
ServerAliveInterval 60
ServerAliveCountMax 720
LogLevel INFO
Bao gồm một tệp cấu hình khác trong tệp cấu hình người dùng SSH
Nếu bạn đã có một tệp cấu hình khác và bạn muốn sử dụng trong tệp hiện tại, bạn nên sử dụng mệnh đề Include, xác định đường dẫn đến tệp cấu hình khác, ở đầu tệp hiện tại như được hiển thị bên dưới. Bạn nên cung cấp đường dẫn tuyệt đối của tệp, nếu không ssh sẽ cho rằng chúng nằm trong ~/.ssh
Include <path-to-file>
#example Include ~/.ssh/config.d/myservers
Host server1
Hostname 192.168.50.2
User root
Port 20222
IdentityFile ~/.ssh/myid_rsa
IdentitiesOnly yes
UserKnownHostsFile /dev/null
StrictHostKeyChecking yes
ServerAliveInterval 60
ServerAliveCountMax 720
LogLevel INFO
Trong hướng dẫn này, chúng ta đã thấy một cách dễ dàng để quản lý kết nối ssh trên Linux từ xa bằng cách sử dụng tệp cấu hình người dùng ssh. Nó khá thuận tiện và bạn có thể đặt các thông số khác nhau cho các máy chủ từ xa khác nhau. Tôi hy vọng bạn đã thích hướng dẫn và tất cả những gì tốt nhất trong cấu hình của bạn.
Xem thêm: Cách bật và sử dụng SSH X11 Forwarding trên Vagrant Instance