Cách sử dụng và cấu hình/ configure lệnh SSH cơ bản trên Linux

Tóm tắt: Trong hướng dẫn này, chúng ta sẽ thảo luận về các trường hợp sử dụng phổ biến của SSH. Chúng ta cũng sẽ thảo luận về cấu hình SSH thường được sử dụng hàng ngày để tăng năng suất của bạn.

Secure Shell (SSH) là giao thức mạng phổ biến, cho phép chúng ta tương tác với các máy chủ từ xa một cách an toàn. Nó cung cấp bảo mật bằng cách mã hóa tất cả giao tiếp giữa chúng.

Cách sử dụng lệnh SSH trong Linux

Trong phần này, chúng ta sẽ thảo luận về một số trường hợp sử dụng phổ biến của giao thức SSH.

Kết nối với máy chủ Linux từ xa

Có nhiều cách để tương tác với máy chủ Linux từ xa bằng các giao thức như telnetftp, netcat, v.v. Tuy nhiên, những giao thức này không an toàn do thiếu mã hóa. Chúng ta có thể sử dụng giao thức SSH để cho phép giao tiếp an toàn giữa các máy chủ.

Chúng ta phải sử dụng một client SSH để tương tác với máy chủ từ xa. Có rất nhiều client dựa trên giao diện đồ họa (GUI) và dòng lệnh (CLI) có sẵn cho Linux. Tuy nhiên, trong toàn bộ hướng dẫn này, chúng ta sẽ sử dụng tiện ích dòng lệnh được gọi là ssh. Mặc định, tiện ích ssh có sẵn trên hầu hết các bản phân phối Linux.

Cú pháp của lệnh SSH như sau:

$ ssh [OPTIONS]  [COMMANDS] [ARGS]

Ở đây, dấu ngoặc vuông ([]) đại diện cho các đối số tùy chọn trong khi các dấu ngoặc nhọn () đại diện cho các đối số bắt buộc.

Hãy kết nối với máy chủ từ xa bằng cách sử dụng client ssh:

$ ssh -l root 192.168.19.130

Trong ví dụ này, chúng ta đã chỉ định tên đăng nhập bằng tùy chọn -l và đích là 192.168.19.130. Kết nối SSH được thiết lập sau khi nhập đúng mật khẩu. Từ đó trở đi, chúng ta có thể thực thi các lệnh trên máy chủ từ xa giống như trên hệ thống cục bộ.

# hostname

Để kết thúc phiên, chúng ta có thể sử dụng lệnh exit hoặc kết hợp phím ctrl+D.

SSH Connect to Remote Linux Host

Quan trọng lưu ý rằng chúng ta phải xác thực với máy chủ từ xa cho mỗi phiên mới. Để tránh nhập mật khẩu mỗi lần, chúng ta có thể thiết lập đăng nhập SSH không cần mật khẩu.

Thực thi lệnh trên máy chủ từ xa

Trong phần trước, chúng ta đã thấy cách thiết lập kết nối với máy chủ từ xa, điều này chỉ phù hợp khi chúng ta sẽ sử dụng máy chủ từ xa trong một thời gian dài. Đôi khi, chúng ta chỉ cần thực thi một hoặc hai lệnh trên máy chủ từ xa. Trong những trường hợp như vậy, chúng ta có thể thực thi những lệnh đó mà không tạo ra một phiên dài hạn.

Hãy thực thi lệnh hostname trên máy chủ từ xa:

$ ssh -l root 192.168.19.130 hostname

Một cách tương tự, chúng ta có thể thực thi nhiều lệnh trên một máy chủ Linux từ xa:

$ ssh -l root 192.168.19.130 'hostname; pwd'
SSH Run Commands in Remote Linux

Quan trọng lưu ý rằng, các lệnh phải được đóng trong dấu ngoặc kép và được phân tách bằng dấu chấm phẩy (;) . Nếu bạn muốn thực thi lệnh trên nhiều máy chủ Linux từ xa, hãy đọc bài viết của chúng tôi - Pssh - Thực thi lệnh trên nhiều máy chủ Linux từ xa.

Thực thi kịch bản trên máy chủ từ xa

Tương tự như các lệnh, chúng ta cũng có thể thực thi một tập lệnh cục bộ trên máy chủ từ xa. Hãy hiểu điều này thông qua một ví dụ.

Đầu tiên, tạo một kịch bản shell đơn giản trên máy tính cục bộ và đặt quyền thực thi cho nó:

$ cat script.sh 

hostname
pwd

Tiếp theo, hãy thực thi nó trên máy chủ từ xa:

$ ssh root@192.168.19.130 'bash -s' < ./script.sh 

Trong ví dụ này, chúng ta đã sử dụng tùy chọn -s của bash để đọc kịch bản từ đầu vào tiêu chuẩn.

SSH Run Script in Remote Linux

Sao chép tệp giữa các máy chủ

Chúng ta thường làm việc với các tệp và thư mục. Một hoạt động thông thường mà người dùng thực hiện là sao chép thư mục và tệp tin. Giống như máy tính cục bộ, chúng ta có thể sao chép tệp và thư mục giữa các máy chủ từ xa bằng lệnh scp, lệnh này sao chép các tệp một cách an toàn bằng giao thức SSH.

Hãy sao chép tệp script.sh sang thư mục /tmp của máy chủ từ xa:

$ scp script.sh root@192.168.19.130:/tmp

Bây giờ, hãy xác minh rằng tệp đã được sao chép:

$ ssh root@192.168.19.130 'ls /tmp/script.sh'
SSH Copy Files to Remote Linux

Một cách tương tự, chúng ta có thể sử dụng lệnh scp để sao chép các thư mục. Tuy nhiên, chúng ta phải sử dụng tùy chọn -r cùng với lệnh.

Kích hoạt nén cho SSH

SSH hỗ trợ nén dữ liệu bằng thuật toán nén gzip, nén tất cả các luồng dữ liệu có thể như stdin, stdout, stderr, v.v. Tùy chọn này rất hữu ích khi sử dụng kết nối mạng chậm.

Chúng ta có thể kích hoạt nén trên SSH bằng cách sử dụng tùy chọn -C:

$ ssh -C -l root 192.168.19.130 'hostname' 
SSH Enable Compression

Kích hoạt chế độ chi tiết cho SSH

Người dùng Linux thường cần gỡ lỗi phiên SSH để điều tra các vấn đề liên quan đến kết nối SSH và cấu hình. Trong những trường hợp như vậy, chúng ta có thể bật chế độ chi tiết để in ra các bản ghi gỡ lỗi của phiên hiện tại.

Hãy kích hoạt chế độ chi tiết bằng tùy chọn -v:

$ ssh -v -l root 192.168.19.130 hostname

Ngoài ra, chúng ta có thể tăng mức chi tiết bằng cách sử dụng nhiều tùy chọn -v.

  • -v – đặt mức chi tiết thành 1 và cung cấp chi tiết về hoạt động phía máy khách.
  • -vv – đặt mức chi tiết thành 2 và cung cấp chi tiết về hoạt động tại cả phía máy khách và máy chủ.
  • -vvv – đặt mức chi tiết thành 3 và cung cấp thông tin chi tiết hơn về hoạt động phía máy khách và máy chủ.

Mức chi tiết tối đa được hỗ trợ bởi SSH là 3. Hãy xem điều này trong tác dụng:

$ ssh -vvv -l root 192.168.19.130 hostname
SSH Enbale Verbose Mode

Trong ví dụ trên, debug1 đại diện cho thông báo gỡ lỗi được kích hoạt bởi mức chi tiết 1. Tương tự, debug2 và debug3 đại diện cho thông báo gỡ lỗi được kích hoạt bởi các mức chi tiết 2 và 3 tương ứng.

Chuỗi thoát trong SSH

Chúng ta có thể sử dụng các chuỗi thoát với SSH để quản lý các phiên giao dịch terminal của client. Hãy thảo luận về các chuỗi thoát phổ biến được sử dụng với các trường hợp sử dụng thích hợp.

Tạm dừng phiên SSH

Đôi khi, chúng ta phải thực hiện một số hoạt động trên máy tính cục bộ mà không chấm dứt phiên SSH hiện tại. Trong tình huống như vậy, chúng ta có thể tạm dừng phiên hiện tại bằng cách sử dụng chuỗi phím ~ + ctrl + z.

Đầu tiên, đăng nhập vào máy chủ từ xa và thực thi lệnh hostname:

$ ssh -l root 192.168.19.130
# hostname

Tiếp theo, để tạm dừng phiên hiện tại, đầu tiên gõ ký tự tilde (~) và sau đó nhấn phím ctrl + z. Quan trọng lưu ý rằng ký tự tilde (~) sẽ không hiển thị trên stdout cho đến khi chúng ta nhấn ctrl + z.

Bây giờ, hãy xác minh rằng phiên đã được tạm dừng:

$ jobs

Ở đây, chúng ta thấy rằng phiên SSH hiện tại đang chạy ở nền.

Hãy tiếp tục phiên trước đó bằng lệnh fg và thực thi lệnh hostname:

$ fg %1
Run SSH Session in Background
Kết thúc phiên SSH bị đóng băng

Tôi chắc chắn bạn đã từng gặp phiên SSH bị đóng băng, đó là khi phiên bị gián đoạn bởi một mạng không ổn định. Ở đây, chúng ta không thể chấm dứt phiên bằng lệnh exit. Tuy nhiên, chúng ta có thể chấm dứt nó bằng chuỗi phím "~ + .".

Đầu tiên, đăng nhập vào máy chủ từ xa:

$ ssh -l root 192.168.19.130

Bây giờ sử dụng chuỗi phím "~ + ." để chấm dứt phiên hiện tại.

Terminate SSH Session

Trong ví dụ này, chúng ta có thể thấy rằng SSH hiển thị thông báo – Connection to 192.168.19.130 closed.

Liệt kê các chuỗi thoát được hỗ trợ

Một điều thú vị là có một chuỗi thoát để liệt kê tất cả các chuỗi thoát được hỗ trợ. Chúng ta có thể sử dụng chuỗi thoát “~ + ?” để liệt kê các chuỗi thoát được hỗ trợ:

Supported Escape Sequences

Ở đây, chúng ta phải nhấn phím enter để thoát khỏi menu trợ giúp.

Cách cấu hình SSH trong Linux

Trong phần này, chúng ta sẽ thảo luận về cấu hình phía máy chủ để củng cố sự an toàn của máy chủ SSH. Máy chủ SSH lưu trữ tất cả các cấu hình của nó trong tệp /etc/ssh/sshd_config. Quan trọng lưu ý rằng, việc truy cập người dùng root được yêu cầu để cập nhật cấu hình SSH.

Hiển thị SSH Banner

Là một quy ước tốt, chúng ta nên luôn hiển thị thông báo trước khi thiết lập một kết nối SSH. Trong một số trường hợp, nó ngăn không cho người dùng trái phép truy cập vào máy chủ từ xa. Hãy xem cách bật cài đặt này một cách từng bước.

Trước tiên, tạo một tệp văn bản trên máy chủ từ xa với một thông báo cảnh báo:

# vi /etc/banner.txt 

Tiếp theo, thêm thông báo banner sau:

*********************************************************************
Warning !!! You are trying to log in to techmint.com's server.
All the activities on this server are monitored.
Terminate the session immediately if you are not an authorized user.
*********************************************************************

Tiếp theo, mở tệp /etc/ssh/sshd_config và chỉ định tệp với chỉ thị Banner:

Banner /etc/banner.txt

Bây giờ, khởi động lại dịch vụ sshd và kết thúc phiên bằng lệnh exit:

# systemctl restart sshd
# exit

Cuối cùng, hãy xác minh banner bằng cách đăng nhập vào máy chủ từ xa:

$ ssh -l root 192.168.19.130
Display SSH Banner

Ở đây, chúng ta có thể thấy rằng máy chủ hiển thị các thông báo SSH một cách chính xác.

Tắt đăng nhập gốc (root) thông qua SSH

Cho đến nay, chúng ta đã sử dụng người dùng root để truy cập vào máy chủ từ xa. Tuy nhiên, Điều này là vi phạm nguyên tắc về quyền ít nhất. Trong môi trường sản xuất, quyền truy cập người dùng root luôn bị hạn chế để cải thiện bảo mật.

Chúng ta có thể sử dụng chỉ thị PermitRootLogin để tắt đăng nhập người dùng root.

Trước tiên, mở tệp /etc/ssh/sshd_config và sử dụng tùy chọn no với chỉ thị PermitRootLogin:

PermitRootLogin no

Tiếp theo, khởi động lại dịch vụ sshd và kết thúc phiên bằng lệnh exit:

# systemctl restart sshd
# exit

Cuối cùng, hãy xác minh điều này bằng cách tạo một phiên SSH mới:

$ ssh -l root 192.168.19.130
Disable SSH Root Login

Ở đây, chúng ta có thể thấy rằng chúng ta không thể đăng nhập vào máy chủ từ xa với người dùng root. Để cho phép đăng nhập người dùng root, chúng ta có thể sử dụng tùy chọn yes cùng với cùng chỉ thị.

Thay đổi cổng SSH mặc định

Theo mặc định, SSH sử dụng cổng TCP 22. Tuy nhiên, chúng ta có thể cấu hình SSH chạy trên một cổng khác, ví dụ 8088.

Trước tiên, mở tệp /etc/ssh/sshd_config và sử dụng giá trị 8088 với chỉ thị Port:

Port 8088

Tiếp theo, khởi động lại dịch vụ sshd và kết thúc phiên:

# systemctl restart sshd
# exit

Bây giờ, hãy đăng nhập vào máy chủ từ xa:

$ ssh -p 8088 -l root 192.168.19.130
Change SSH Port

Trong ví dụ này, chúng ta đã sử dụng tùy chọn -p để chỉ định số cổng.

Trong một số trường hợp, chúng ta phải thực hiện một số bước khác để cho phép giao tiếp trên một cổng không mặc định. Chẳng hạn như xác định các cổng khả dụng, cập nhật các quy tắc tường lửa, cài đặt SELinux, v.v.

Trong bài viết này, chúng ta đã thảo luận về giao thức SSH và các trường hợp sử dụng phổ biến của nó. Tiếp theo, chúng ta đã thảo luận về một số tùy chọn phổ biến. Cuối cùng, chúng ta đã thảo luận về một số cài đặt để bảo mật máy chủ SSH.