SSH (Secure Shell) là hệ thống mạng được mã hóa đầu cuối cho phép người dùng truy cập từ xa từ máy khách đến máy chủ hoặc hệ thống . Do hệ thống bảo mật mật mã không đối xứng của nó, nó khá an toàn và bảo mật khi truy cập vào máy chủ ngay cả từ một mạng máy khách không an toàn. Nhưng đôi khi do không hoạt động hoặc tín hiệu mạng kém, truy cập từ xa SSH có thể bị ngắt kết nối. Dù lý do là gì, với tư cách là quản trị viên Linux, công việc quan trọng là giữ cho các phiên làm việc (session) và tiến trình SSH chạy sau khi ngắt kết nối.
Lý do khiến các session SSH bị ngắt kết nối
Lỗi proxy tunnel SSH, network timeout, sử dụng sai cổng mạng hoặc thậm chí không đăng nhập vào hệ thống của bạn với tư cách người dùng đúng cũng có thể khiến bạn bị ngắt kết nối khỏi truy cập từ xa SSH. Trong bài đăng này, chúng ta sẽ thảo luận về câu hỏi thường gặp nhất về SSH; cách giữ cho các session và tiến trình SSH chạy sau khi xảy ra ngắt kết nối.
1. Tiếp tục duy trì công việc của bạn khi ngắt connect SSH bằng lệnh Screen
Lệnh screen là sử dụng và hữu ích nhất lệnh cho việc quản trị SSH. Lệnh này có thể giải quyết vấn đề hostname cho cả địa chỉ IPv4 và IPv6. Với các chức năng root, lệnh screen có thể đăng xuất hoặc loại bỏ một phiên làm việc từ đầu máy khách đến cuối máy chủ. Nếu bạn là một người mới sử dụng Linux SSH, đây là một số CLI có thể giúp bạn cài đặt và tìm hướng dẫn sử dụng lệnh screen:
Đối với Ubuntu:
sudo apt install screen -y
Đối với OpenSUSE:
sudo zypper install screen
Đối với Arch Linux:
sudo pacman -S screen
Đối với Red Hat Enterprise Linux:
sudo yum install screen
Sau khi cài đặt xong, hãy bắt đầu theo dõi screen khởi động hệ thống của bạn.
screen screen --help
Khi bạn có quyền truy cập SSH vào máy chủ, bạn muốn truy cập từ xa. Nếu bạn đang lên kế hoạch cho một đêm dài làm việc từ máy tính của mình, nhưng bạn không muốn bị ngắt kết nối connect SSH của mình, bạn có thể sử dụng lệnh screen. Điều này có thể tách phiên làm việc screen của bạn, nhưng đừng lo lắng, các tác vụ bạn bắt đầu sẽ được hoàn thành.
Để tách màn hình của bạn, hãy nhấn Ctrl-A
và sau đó Ctrl-D
trên bàn phím. Bạn có thể đăng nhập để theo dõi tiến độ công việc bất cứ lúc nào từ terminal của mình. Để kết nối lại hoặc kết nối với cái hiện có với phiên, hãy sử dụng CLI sau.
screen -r screen -D -r
2. Tiếp tục công việc của bạn bằng tmux
Lệnh tmux là một công cụ rất phổ biến và hữu ích cho các lập trình viên và quản trị hệ thống cho phép người dùng chuyển đổi giữa các chương trình để chương trình trong terminal. Để giữ cho các phiên SSH chạy trong nền, tmux là một giải pháp rất nhanh chóng. Nó có thể tách và gắn lại các ứng dụng nơi các tiến trình được tiếp tục chạy trong nền. Đây là hướng dẫn cài đặt tmux cho các bản phân phối Linux.
Đối với Arch Linux:
sudo pacman -S tmux
Đối với Red Hat Enterprise Linux:
sudo yum install tmux
Đối với Ubuntu:
sudo apt-get install tmux
Đối với OpenSUSE:
sudo zypper install tmux
Sau khi cài đặt tmux
, hãy bắt đầu tmux session
sử dụng các lệnh trên terminal. Sẽ không mất nhiều thời gian để cài đặt. Sau khi cài đặt xong, bây giờ bạn có thể bắt đầu tmux
. Để bắt đầu tmux
, chỉ cần nhập tmux vào terminal.
tmux
Nếu bạn cần chạy nhiều hơn một terminal để giữ cho tất cả các phiên SSH chạy trong nền, trong trường hợp đó, bạn có thể gặp khó khăn khi chuyển giữa tmux sang tmux. Dưới đây là các dòng lệnh để chuyển đổi dạng này sang dạng khác.
tmux detach tmux attach tmux attach -t 2
Để kiểm tra tất cả màn hình tmux, hãy sử dụng lệnh list của tmux.
tmux ls
3. Tiếp tục chạy phiên SSH bằng byobu
Công cụ byobu chủ yếu được sử dụng để quản trị SSH từ xa và giám sát trên Linux. Nó là một phần mềm có nguồn gốc mã nguồn mở và có thể được sử dụng cùng với tmux hoặc screen. Bạn có thể xem trạng thái hiện tại, thông báo và tin nhắn bằng công cụ này. Mặc dù byobu được cài đặt theo mặc định với Ubuntu, nhưng nếu không, bạn có thể cài đặt nó bên trong máy Linux của mình. Để kiểm tra xem byobu đã được cài đặt hay chưa trong hệ thống của bạn bằng cách kiểm tra version của byobu.
byobu --version
Sau đó, bật byobu, nó sẽ giúp giữ cho các phiên SSH của bạn chạy ở chế độ nền sau khi ngắt kết nối.
byobu
Đối với Ubuntu:
sudo apt install byobu
Đối với OpenSUSE:
sudo zypper addrepo https://download.opensuse.org/repositories/utilities/openSUSE_Leap_42.3/utilities.repo sudo zypper refresh sudo zypper install byobu
Đối với Arch Linux:
yaourt -S byobu packer -S byobu
Đối với Red Hat Enterprise Linux:
sudo yum install byobu
Đối với Fedora:
sudo dnf install byobu
Để bắt đầu byobu
, chỉ cần nhập byobu vào terminal và nhấn Enter.
byobu
Bây giờ, nếu bạn đang sử dụng tmux hoặc screen ,bạn có thể chọn và chọn giữa bất kỳ cái nào trong số chúng phục vụ cho công việc của bạn.
byobu-select-backend
Giờ đây, bạn có thể quản lý và giữ cho các phiên SSH của mình chạy trong nền sau khi ngắt kết nối, sử dụng các phím chức năng của bàn phím hệ thống. Để bắt đầu với SSH cùng với byobu, hãy nhấn CTRL SHIFT F2
từ bàn phím của bạn để bật môi trường SSH. Để chuyển các phiên SSH của bạn về phía trước và phía sau, bạn có thể sử dụng ALT UP
và ALT DOWN
.
Để ngắt kết nối các phiên SSH của bạn, hãy nhấn F6
từ bàn phím. Bây giờ, nếu bạn đang tìm cách tách nhưng không ngắt kết nối phiên, thì đây là cách bạn thực hiện. Để tách các phiên SSH và vẫn được kết nối, hãy nhấn SHIFT F6
. Đây là một lệnh bàn phím bổ sung cho bạn. Để chỉ giữ phiên màn hình hiện tại hoạt động và đóng tất cả các cửa sổ khác, hãy nhấn ALT F6
.
4. Tiếp tục chạy phiên SSH bằng lệnh nohup
Lệnh nohup à một công cụ thay thế rất hữu ích cho screen hoặc tmux. Nó cũng cho phép người dùng duy trì các phiên SSH chạy ngay cả khi họ bị ngắt kết nối. Lệnh nohup cho hệ thống để chạy tất cả các tiến trình trong nền bằng cách tránh các tín hiệu ngắt kết nối (SIGHUP).
Để kiểm tra hướng dẫn sử dụng và các tùy chọn trên terminal Linux của bạn, hãy nhập lệnh sau vào terminal và nhấn Enter.
nohup options
Để kiểm tra danh sách công việc hiện đang hoạt động, hãy sử dụng -l
từ terminal của bạn.
job -l
Bây giờ, đối với kết nối SSH, để tránh mất kết nối và giữ cho các phiên của bạn chạy sau khi ngắt kết nối, hãy sử dụng các dòng lệnh nohup theo sau công việc của bạn. Bạn cũng có thể lấy danh sách đầu ra các công việc của mình trong một tệp văn bản bằng cách sử dụng lệnh cat cùng với lệnh nohup.
nohup ./hello.sh cat nohup.out
Để chạy một tiến trình trong nền, bạn có thể sử dụng ký hiệu & ngay sau lệnh nohup. Giống như, nếu tôi muốn kiểm tra ping cho hocdevops.com trong nền, dòng lệnh sẽ giống như dòng dưới đây. Và khi bạn nghĩ rằng công việc của bạn đã hoàn thành, để xem kết quả, hãy sử dụng lệnh pgrep.
nohup ping hocdevops.com & pgrep -a ping
5. Tiếp tục chạy phiên SSH bằng lệnh disown
Nếu bạn không có đặc quyền root hệ thống, có thể cái này sẽ giải quyết được vấn đề của bạn. Lệnh disown có thể thực hiện bất kỳ nhiệm vụ chưa được list từ running system log của bạn. Do đó, nó có thể ẩn một tiến trình đang diễn ra để tránh tất cả các lỗi tự động đăng xuất hoặc lỗi treo máy (SIGHUP). Bạn thực sự có thể sử dụng lệnh quản lý tiến trình diswon để giữ cho các phiên SSH của bạn chạy bằng cách ẩn tác vụ của bạn.
Để xóa hoặc ẩn tác vụ của bạn khỏi trình quản lý tác vụ, hãy sử dụng lệnh diswon trong terminal.
disown
Để kiểm tra trạng thái hiện tại của tác vụ, hãy sử dụng lệnh current shell.
current shell
Bạn cũng có thể đặt một list các task bằng một lệnh terminal đơn.
disown job1 disown job1 job2 ... jobn
Và để kiểm tra danh sách các task , hãy sử dụng option -l.
job -l
Để xóa tất cả các task hiện tại khỏi cửa sổ, hãy nhập cú pháp -a sau bằng lệnh hủy bỏ.
disown -a
Để chỉ xóa một hoặc nhiều task đang chạy khỏi cửa sổ, hãy sử dụng -r sau lệnh diswon.
disown -r
Bây giờ đối với SSH, để chạy một task trong nền sau khi phiên được kết nối, hãy sử dụng -h. Quá trình này có thể giữ cho các phiên SSH của bạn chạy ngay cả sau khi ngắt kết nối.
disown -h jobID disown -h% 2
Sửa lỗi timeout SSH trong RHEL
Khi bạn kết nối với SSH trên Red Hat Enterprise Linux (RHEL), bạn có thể gặp sự cố timeout thường xuyên và mất kết nối. Sự cố này xảy ra do response time form không hợp lệ từ phía client hoặc từ phí server. Trong thư mục gốc Red Hat, bạn phải tìm và chỉnh sửa file sshd_config.txt
để giải quyết vấn đề timeout này. Sau khi hoàn tất, bạn có thể lấy lại kết nối SSH của mình ngay cả sau khi bị ngắt kết nối.
Ở bên trong file sshd_config.txt
, bạn sẽ tìm thấy hai tùy chọn có tên là ClientAliveInterval
và ClientAliveCountMax
, bạn cần chỉnh sửa các tệp log này để tối đa hóa thời gian phản hồi của máy chủ với máy khách. Khoảng thời gian chờ được tính bằng cách nhân các giá trị của ClientAliveInterval và ClientAliveCountMax.
Tất cả những gì bạn cần là chỉnh sửa khoảng thời gian của hai giá trị này theo thời lượng phản hồi hệ thống và mạng của bạn. Nếu bạn muốn tối đa hóa thời gian 10 phút cho khoảng thời gian kết thúc máy khách và 5 lần cho số máy khách, thì config của bạn bên trong file sshd_config.txt
sẽ giống như bên dưới. Và sau đó, khởi động lại SSH.
ClientAliveInterval 10m ClientAliveCountMax 5
Lời kết
Đối với quản trị viên hệ thống, giữ cho các phiên và tiến trình SSH chạy là một công việc quan trọng để đáp ứng khách hàng và hoàn thành nhiệm vụ. Việc bị ngắt kết nối và các phiên thường xuyên bị mất là rất nhiều phiền toái và khó chịu. Vì vậy, trong bài đăng này, chúng ta đã cố gắng thảo luận và minh họa các lý do tại sao các phiên SSH bị ngắt kết nối và cũng mô tả tất cả các phương pháp có thể có về cách giữ cho các phiên SSH chạy sau khi ngắt kết nối.
Nếu bạn đã từng gặp rắc rối khi ngắt kết nối phiên SSH và biết nó có thể gây khó chịu như thế nào, hãy chia sẻ kinh nghiệm của bạn với chúng tôi. Và cũng có thể bình luận nếu bạn có bất cứ điều gì để thêm hoặc hỏi bất cứ điều gì liên quan đến bài đăng này trong phần bình luận. Đừng quên chia sẻ bài đăng này với bạn bè của bạn.