SSH (Secure Shell) là một giao thức bảo mật tiêu chuẩn được sử dụng rộng rãi để truy cập và quản trị từ xa các hệ thống Linux. Khi thiết lập kết nối SSH, bạn sẽ được đưa vào một shell từ xa – một giao diện dòng lệnh cho phép tương tác trực tiếp với server. Mọi thao tác bạn thực hiện trong terminal tại máy cục bộ sẽ được truyền qua một tunnel mã hóa và thực thi an toàn trên máy chủ từ xa.
Trong tài liệu tổng hợp nhanh dạng cheat sheet này, DataOnline sẽ trình bày những phương pháp hiệu quả nhất để kết nối và cấu hình SSH một cách linh hoạt. Đây là nguồn tài liệu tham khảo lý tưởng dành cho các SysAdmin, DevOps hoặc bất kỳ ai đang tìm kiếm hướng dẫn nhanh về cách triển khai, xác thực, và tối ưu kết nối SSH cho các tác vụ quản trị hệ thống hàng ngày.
Tìm hiểu cách sử dụng SSH để kết nối và quản lý server an toàn. Bài viết chi tiết cách tạo SSH key, cấu hình client và server. Nếu bạn đang tìm kiếm giải pháp VPS hosting đáng tin cậy, DataOnline cung cấp VPS tốc độ cao, bảo mật tối ưu. Khám phá VPS hosting ngay!
Cách sử dụng hướng dẫn này
● Đọc phầnTổng quan về SSHtrước nếu bạn chưa quen hoặc mới bắt đầu với SSH.
● Sử dụng các mục tiếp theo phù hợp với mục đích của bạn. Hầu hết các mục không phụ thuộc lẫn nhau, vì vậy bạn có thể áp dụng độc lập.
● Dùng menuContentsbên trái (ở chế độ rộng màn hình) hoặc chức năng tìm kiếm của trình duyệt để định vị nhanh mục cần.
● Sao chép và dán các ví dụ lệnh, thay thế các giá trị được bôi đậm bằng giá trị của bạn.
Tổng quan về SSH
Cách phổ biến nhất để kết nối tới server Linux từ xa là dùng SSH (Secure Shell). SSH cho phép bạn thực thi lệnh, thay đổi cấu hình và quản lý dịch vụ từ xa qua một kết nối mã hóa.
Cách SSH hoạt động
Khi bạn kết nối thông qua SSH, bạn sẽ được đưa vào một phiên shell – một giao diện dòng lệnh (text-based interface) cho phép bạn tương tác trực tiếp với máy chủ. Trong suốt phiên làm việc qua SSH, mọi lệnh bạn nhập vào terminal trên máy cục bộ sẽ được truyền qua một tunnel SSH được mã hóa và thực thi trên máy chủ từ xa.
Kết nối SSH được triển khai dựa trên mô hình client-server. Điều này có nghĩa là để thiết lập được một phiên SSH, máy chủ từ xa phải đang chạy một phần mềm gọi là SSH daemon. Phần mềm này sẽ lắng nghe các kết nối trên một cổng mạng cụ thể, xác thực các yêu cầu kết nối và khởi tạo môi trường tương ứng nếu người dùng cung cấp thông tin xác thực chính xác.
Máy tính của người dùng phải có SSH client – một phần mềm có khả năng giao tiếp qua giao thức SSH. SSH client sẽ tiếp nhận các thông tin như địa chỉ máy chủ từ xa, tên người dùng, và thông tin xác thực cần thiết để thực hiện quá trình đăng nhập. Ngoài ra, client cũng có thể chỉ định thêm các tham số về loại kết nối mà người dùng muốn thiết lập.
Cách SSH xác thực người dùng
Các client thường xác thực bằng hai cách: sử dụng mật khẩu (kém an toàn và không được khuyến nghị) hoặc sử dụng SSH keys, vốn được đánh giá là cực kỳ bảo mật.
Việc đăng nhập bằng mật khẩu tuy đã được mã hóa và dễ sử dụng đối với người mới, nhưng lại tiềm ẩn rủi ro bảo mật lớn. Các bot tự động và kẻ tấn công thường liên tục dò mật khẩu để truy cập vào các tài khoản sử dụng phương thức này, từ đó dễ dẫn đến lộ lọt thông tin. Vì lý do đó, chúng tôi khuyến nghị nên sử dụng xác thực bằng SSH key trong hầu hết các cấu hình.
SSH keys là một cặp khóa mã hóa được thiết kế để xác thực. Mỗi cặp bao gồm một public key (khóa công khai) và một private key (khóa riêng tư). Public key có thể chia sẻ tự do mà không lo rò rỉ bảo mật, trong khi Private key phải được bảo vệ nghiêm ngặt và tuyệt đối không được tiết lộ cho bất kỳ ai.
Để xác thực bằng SSH key, người dùng cần tạo sẵn một cặp key trên máy tính cá nhân. Trên server từ xa, Public key cần được sao chép vào file ~/.ssh/authorized_keys
trong thư mục người dùng. File này chứa danh sách các Public key (mỗi dòng là một key) được phép đăng nhập vào tài khoản tương ứng.
Khi client kết nối và muốn dùng xác thực bằng SSH key, nó sẽ thông báo cho server biết và cung cấp thông tin về public key cần sử dụng. Server sẽ kiểm tra xem key đó có nằm trong authorized_keys
không, sau đó tạo ra một chuỗi ngẫu nhiên và mã hóa chuỗi này bằng public key được cung cấp. Chỉ Private key tương ứng mới có thể giải mã được thông điệp này.
Client nhận được thông điệp mã hóa, giải mã nó bằng private key và kết hợp chuỗi ngẫu nhiên thu được với một session ID đã thỏa thuận từ trước. Từ đó, client tạo ra một MD5 hash và gửi lại server. Vì server đã có chuỗi gốc và session ID, nó có thể tự tạo ra hash để đối chiếu. Nếu trùng khớp, server xác nhận client thực sự sở hữu private key tương ứng.
Giờ đây khi bạn đã hiểu cách SSH hoạt động, chúng ta có thể đi vào các ví dụ thực tiễn để khám phá những cách triển khai và sử dụng SSH một cách linh hoạt hơn.
Tạo và làm việc với SSH Keys
Phần này sẽ hướng dẫn cách tạo khóa SSH trên máy khách và phân phối khóa công khai đến các máy chủ nơi chúng sẽ được sử dụng. Đây là phần nên bắt đầu nếu bạn chưa từng tạo khóa trước đây, vì nó cung cấp sự bảo mật cao hơn cho các kết nối trong tương lai.
Tạo cặp SSH Key
Tạo cặp Public/Private Key (mặc định RSA) trên máy cục bộ:
ssh-keygen
Generating public/private rsa key pair. Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Lời nhắc này cho phép bạn chọn vị trí lưu trữ khóa riêng RSA của mình. Nhấn ENTER để giữ nguyên vị trí mặc định, sẽ lưu trữ chúng trong thư mục ẩn .ssh trong thư mục chính của người dùng. Giữ nguyên vị trí mặc định sẽ giúp trình khách SSH tự động tìm thấy các khóa.
Enter passphrase (empty for no passphrase): Enter same passphrase again:
Nhập mật khẩu (để trống nếu không muốn sử dụng mật khẩu): Nhập lại mật khẩu một lần nữa: Lời nhắc tiếp theo cho phép bạn nhập một mật khẩu có độ dài tùy ý để bảo mật khóa riêng của bạn. Như một biện pháp bảo mật bổ sung, bạn sẽ phải nhập mật khẩu mà bạn đã thiết lập mỗi khi sử dụng khóa riêng. Bạn có thể nhấn ENTER để để trống nếu không muốn sử dụng mật khẩu. Tuy nhiên, hãy lưu ý rằng điều này sẽ cho phép bất kỳ ai có quyền kiểm soát khóa riêng của bạn có thể đăng nhập vào các máy chủ của bạn.
Nếu bạn chọn nhập mật khẩu, sẽ không có gì được hiển thị khi bạn gõ. Đây là một biện pháp bảo mật.
Output Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | + | | o S . | | o . * + | | o + = O . | | + = = + | | ....Eo+ | +-----------------+
Tạo một cặp khóa SSH với số lượng Bit lớn hơn
Khóa SSH mặc định có độ dài 2048 bit. Điều này thường được coi là đủ để đảm bảo an toàn, nhưng bạn có thể chỉ định một số lượng bit lớn hơn để có một khóa mạnh mẽ hơn.
Để làm điều này, bạn cần thêm tham số -b với số lượng bit bạn muốn. Hầu hết các máy chủ hỗ trợ khóa có độ dài ít nhất là 4096 bit. Các khóa dài hơn có thể không được chấp nhận vì lý do bảo vệ DDOS:
ssh-keygen -b4096
Nếu bạn đã tạo một khóa khác trước đó, bạn sẽ được yêu cầu quyết định xem có muốn ghi đè lên khóa cũ hay không:
Overwrite (y/n)?
Nếu bạn chọn “yes”, khóa cũ của bạn sẽ bị ghi đè và bạn sẽ không thể đăng nhập vào các máy chủ bằng khóa đó nữa. Do đó, hãy chắc chắn rằng bạn chỉ ghi đè khóa một cách cẩn thận.
Xóa hoặc thay đổi mật khẩu của khóa riêng
Nếu bạn đã tạo mật khẩu cho khóa riêng và muốn thay đổi hoặc xóa mật khẩu đó, bạn có thể làm điều này dễ dàng.
Lưu ý: Để thay đổi hoặc xóa mật khẩu, bạn cần phải biết mật khẩu gốc. Nếu bạn đã mất mật khẩu của khóa, không có cách nào khôi phục và bạn sẽ phải tạo một cặp khóa mới.
Để thay đổi hoặc xóa mật khẩu, bạn chỉ cần gõ:
ssh-keygen -p
Enter file in which the key is (/root/.ssh/id_rsa):
Bạn có thể nhập vị trí của khóa bạn muốn thay đổi hoặc nhấn ENTER để chấp nhận giá trị mặc định:
Enter old passphrase:
Nhập mật khẩu cũ mà bạn muốn thay đổi. Sau đó, bạn sẽ được yêu cầu nhập mật khẩu mới:
Enter new passphrase (empty for no passphrase): Enter same passphrase again:
Mỗi cặp khóa SSH chia sẻ một “dấu vân tay” mã hóa duy nhất, có thể được sử dụng để xác định các khóa một cách độc đáo. Điều này có thể hữu ích trong nhiều tình huống.
Để tìm dấu vân tay của một khóa SSH, bạn gõ:
ssh-keygen -l
Nhập tệp chứa khóa (mặc định là /root/.ssh/id_rsa):
Bạn có thể nhấn ENTER nếu đó là vị trí đúng của khóa, nếu không, hãy nhập vị trí sửa đổi. Bạn sẽ nhận được một chuỗi chứa độ dài bit của khóa, dấu vân tay, tài khoản và máy chủ mà khóa đã được tạo ra cho, và thuật toán sử dụng:
Kết quả
4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e demo@test (RSA)
Sao chép khóa công khai SSH đến máy chủ với SSH-Copy-ID
Để sao chép khóa công khai của bạn lên một máy chủ, cho phép bạn xác thực mà không cần mật khẩu, có một số cách để thực hiện.
Nếu bạn hiện tại đã cấu hình quyền truy cập SSH bằng mật khẩu cho máy chủ của mình và công cụ ssh-copy-id
đã được cài đặt, thì đây là một quá trình đơn giản. Công cụ ssh-copy-id
được bao gồm trong nhiều gói OpenSSH của các bản phân phối Linux, vì vậy rất có thể nó đã được cài đặt mặc định.
Nếu bạn có tùy chọn này, bạn có thể dễ dàng chuyển khóa công khai của mình bằng cách gõ:
ssh-copy-id username@remote_host
Lệnh này sẽ yêu cầu bạn nhập mật khẩu của tài khoản người dùng trên hệ thống từ xa:
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want tocontinue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log inwith the newkey(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1key(s) remain to be installed -- if you are prompted now it isto install the new keys demo@111.111.11.111's password:
Sau khi bạn nhập mật khẩu, nội dung của khóa ~/.ssh/id_rsa.pub
sẽ được thêm vào cuối tệp ~/.ssh/authorized_keys
của tài khoản người dùng:
Number of key(s) added: 1
Bây giờ bạn có thể thử đăng nhập vào máy chủ mà không cần mật khẩu:
ssh username@remote_host
Sao chép khóa công khai SSH đến máy chủ mà không sử dụng SSH-Copy-ID
Nếu bạn không có công cụ ssh-copy-id
, nhưng vẫn có quyền truy cập SSH bằng mật khẩu vào máy chủ từ xa, bạn có thể sao chép nội dung khóa công khai của mình theo cách khác.
Bạn có thể xuất nội dung của khóa và chuyển nó qua lệnh ssh
. Ở phía máy chủ từ xa, bạn có thể đảm bảo rằng thư mục ~/.ssh
đã tồn tại, sau đó thêm nội dung đã chuyển qua vào tệp ~/.ssh/authorized_keys
:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Bạn sẽ được yêu cầu nhập mật khẩu cho tài khoản từ xa:
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want tocontinue connecting (yes/no)? yes demo@111.111.11.111's password:
Sau khi nhập mật khẩu, khóa của bạn sẽ được sao chép và bạn có thể đăng nhập mà không cần mật khẩu:
ssh username@remote_IP_host
Sao chép khóa công khai SSH đến máy chủ thủ công
Nếu bạn không có quyền truy cập SSH bằng mật khẩu, bạn sẽ phải thêm khóa công khai vào máy chủ từ xa một cách thủ công.
Trên máy tính cục bộ của bạn, bạn có thể tìm nội dung của tệp khóa công khai bằng cách gõ:
cat ~/.ssh/id_rsa.pub
Kết quả
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Bạn có thể sao chép giá trị này và dán nó thủ công vào vị trí thích hợp trên máy chủ từ xa. Bạn sẽ phải đăng nhập vào máy chủ từ xa bằng cách khác.
Trên máy chủ từ xa, tạo thư mục ~/.ssh
nếu nó chưa tồn tại:
mkdir -p ~/.ssh
Sau đó, bạn có thể tạo hoặc thêm vào tệp ~/.ssh/authorized_keys
bằng cách gõ:
echo public_key_string >> ~/.ssh/authorized_keys
Bây giờ bạn có thể đăng nhập vào máy chủ từ xa mà không cần mật khẩu. Hiểu rõ cách vô hiệu hóa đăng nhập mật khẩu và tăng cường bảo mật server với SSH. Để triển khai server hiệu quả, chọn VPS giá rẻ từ DataOnline với chi phí chỉ từ 54.000 VNĐ/năm, đảm bảo uptime 99.9%. Xem thêm VPS giá rẻ!
Hướng dẫn kết nối cơ bản
Phần sau sẽ giới thiệu một số kiến thức cơ bản về cách kết nối đến một máy chủ thông qua SSH.
Kết nối đến máy chủ từ xa
Để kết nối đến một máy chủ từ xa và mở một phiên shell trên đó, bạn có thể sử dụng lệnh ssh
.
Cách đơn giản nhất là giả sử tên người dùng trên máy tính cục bộ của bạn là giống với tên người dùng trên máy chủ từ xa. Nếu đúng như vậy, bạn có thể kết nối bằng lệnh:
ssh remote_host
Nếu tên người dùng của bạn trên máy chủ từ xa khác với tên người dùng trên máy tính cục bộ, bạn cần chỉ định tên người dùng từ xa như sau:
ssh username@remote_host
Lần đầu tiên kết nối đến một máy chủ mới, bạn sẽ thấy một thông báo như sau:
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want tocontinue connecting (yes/no)? yes
Gõ “yes” để chấp nhận tính xác thực của máy chủ từ xa.
Nếu bạn sử dụng xác thực bằng mật khẩu, bạn sẽ được yêu cầu nhập mật khẩu cho tài khoản từ xa tại đây. Nếu bạn sử dụng khóa SSH, bạn sẽ được yêu cầu nhập passphrase của khóa riêng (nếu có), nếu không, bạn sẽ được đăng nhập tự động.
Chạy lệnh đơn trên máy chủ từ xa
Để chạy một lệnh đơn trên máy chủ từ xa thay vì mở một phiên shell, bạn có thể thêm lệnh cần chạy sau thông tin kết nối, như sau:
ssh username@remote_host command_to_run
Lệnh này sẽ kết nối đến máy chủ từ xa, xác thực với thông tin của bạn và thực thi lệnh bạn đã chỉ định. Kết nối sẽ tự động đóng lại ngay sau đó.
Đăng nhập vào máy chủ với cổng khác
Mặc định, daemon SSH trên máy chủ chạy trên cổng 22. Client SSH của bạn sẽ giả định rằng cổng này khi cố gắng kết nối. Nếu máy chủ SSH của bạn nghe trên một cổng không chuẩn (điều này sẽ được trình bày ở phần sau), bạn sẽ phải chỉ định số cổng mới khi kết nối bằng client.
Bạn có thể làm điều này bằng cách chỉ định số cổng với tùy chọn -p
:
ssh -p port_num username@remote_host
Để tránh việc phải làm điều này mỗi khi đăng nhập vào máy chủ từ xa, bạn có thể tạo hoặc chỉnh sửa một tệp cấu hình trong thư mục ~/.ssh
trong thư mục chính của máy tính cục bộ.
Chỉnh sửa hoặc tạo tệp ngay bây giờ bằng cách gõ:
nano ~/.ssh/config
Trong tệp này, bạn có thể thiết lập các tùy chọn cấu hình riêng cho từng máy chủ. Để chỉ định cổng mới, sử dụng định dạng như sau:
~/.ssh/config Host remote_alias HostName remote_host Port port_num
Điều này sẽ cho phép bạn đăng nhập mà không cần phải chỉ định số cổng cụ thể trên dòng lệnh.
Thêm khóa SSH của bạn vào SSH Agent để tránh gõ Passphrase
Nếu bạn đã đặt passphrase cho khóa SSH riêng của mình, bạn sẽ được yêu cầu nhập passphrase mỗi khi sử dụng nó để kết nối đến một máy chủ từ xa.
Để tránh phải làm điều này nhiều lần, bạn có thể chạy một SSH agent. Đây là một tiện ích nhỏ lưu trữ khóa riêng của bạn sau khi bạn đã nhập passphrase lần đầu tiên. Nó sẽ có sẵn trong suốt phiên làm việc của terminal, cho phép bạn kết nối trong tương lai mà không cần phải nhập lại passphrase.
Điều này cũng quan trọng nếu bạn cần phải chuyển tiếp thông tin xác thực SSH của mình (sẽ được trình bày sau).
Để bắt đầu SSH Agent, gõ lệnh sau trong phiên làm việc terminal của bạn:
eval $(ssh-agent)
Agent pid 10891
Điều này sẽ khởi động chương trình agent và đưa nó vào chế độ nền. Bây giờ, bạn cần thêm khóa riêng của mình vào agent để nó có thể quản lý khóa của bạn:
ssh-add
Nhập passphrase cho /home/demo/.ssh/id_rsa
: Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)
Bạn sẽ phải nhập passphrase (nếu có). Sau đó, tệp nhận dạng của bạn sẽ được thêm vào agent, cho phép bạn sử dụng khóa để đăng nhập mà không cần nhập lại passphrase.
Chuyển tiếp thông tin xác thực SSH để sử dụng trên máy chủ
Nếu bạn muốn có thể kết nối mà không cần mật khẩu từ một máy chủ này sang máy chủ khác, bạn sẽ cần phải chuyển tiếp thông tin SSH của mình. Điều này cho phép bạn xác thực vào một máy chủ khác thông qua máy chủ bạn đang kết nối, sử dụng thông tin xác thực trên máy tính cục bộ của bạn.
Để bắt đầu, bạn cần phải khởi động SSH agent và thêm khóa SSH của bạn vào agent (xem phần trước). Sau khi hoàn tất, bạn cần kết nối vào máy chủ đầu tiên bằng tùy chọn -A
. Điều này sẽ chuyển tiếp thông tin xác thực của bạn tới máy chủ cho phiên làm việc này:
ssh -A username@remote_host
Từ đây, bạn có thể SSH vào bất kỳ máy chủ nào mà khóa SSH của bạn có quyền truy cập. Bạn sẽ kết nối như thể khóa SSH riêng của bạn nằm trên máy chủ này.
Cấu hình máy chủ bên mặt
Phần này chứa các tùy chọn cấu hình máy chủ phổ biến có thể thay đổi cách mà máy chủ phản hồi và loại kết nối nào được phép.
Tắt xác thực bằng mật khẩu
Nếu bạn đã cấu hình và thử nghiệm khóa SSH và chúng hoạt động tốt, thì tốt nhất là tắt xác thực bằng mật khẩu. Điều này sẽ ngăn không cho bất kỳ người dùng nào đăng nhập vào máy chủ từ xa bằng mật khẩu.
Để làm điều này, kết nối đến máy chủ từ xa của bạn và mở tệp /etc/ssh/sshd_config
với quyền root hoặc sudo:
sudo nano /etc/ssh/sshd_config
Trong tệp, tìm kiếm chỉ thị PasswordAuthentication
. Nếu nó đã bị chú thích, bạn hãy bỏ chú thích nó. Thiết lập giá trị của nó là “no” để tắt đăng nhập bằng mật khẩu:
/etc/ssh/sshd_config PasswordAuthentication no
Sau khi thực hiện thay đổi, lưu và đóng tệp. Để áp dụng thay đổi, bạn cần khởi động lại dịch vụ SSH.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Bây giờ, tất cả các tài khoản trên hệ thống sẽ không thể đăng nhập vào máy chủ từ xa bằng mật khẩu.
Thay đổi cổng SSH
Một số quản trị viên khuyên bạn nên thay đổi cổng mặc định mà SSH sử dụng. Điều này giúp giảm thiểu số lượng yêu cầu xác thực mà máy chủ của bạn phải chịu từ các bot tự động.
Để thay đổi cổng mà daemon SSH lắng nghe, bạn sẽ cần đăng nhập vào máy chủ từ xa của mình. Mở tệp sshd_config
trên hệ thống từ xa với quyền root, bằng cách đăng nhập với người dùng đó hoặc sử dụng sudo:
sudo nano /etc/ssh/sshd_config
Khi bạn ở trong tệp, tìm chỉ thị Port 22
và thay đổi nó để phản ánh cổng bạn muốn sử dụng. Ví dụ, để thay đổi cổng thành 4444, bạn sẽ thêm vào:
/etc/ssh/sshd_config #Port 22 Port 4444
Lưu và đóng tệp khi bạn xong. Để thực thi thay đổi, bạn phải khởi động lại daemon SSH.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Sau khi daemon được khởi động lại, bạn sẽ cần phải xác thực bằng cách chỉ định số cổng (như đã trình bày trong phần trước).
Giới hạn người dùng có thể kết nối qua SSH
Để giới hạn rõ ràng các tài khoản người dùng có thể đăng nhập qua SSH, bạn có thể sử dụng một số phương pháp khác nhau, mỗi phương pháp đều liên quan đến việc chỉnh sửa tệp cấu hình daemon SSH.
Trên máy chủ từ xa của bạn, mở tệp này với quyền root hoặc sudo:
sudo nano /etc/ssh/sshd_config
Phương pháp đầu tiên để chỉ định các tài khoản được phép đăng nhập là sử dụng chỉ thị AllowUsers
. Tìm chỉ thị AllowUsers
trong tệp. Nếu nó không tồn tại, bạn hãy tạo nó ở bất kỳ đâu trong tệp. Sau chỉ thị, liệt kê các tài khoản người dùng mà bạn muốn cho phép đăng nhập qua SSH:
/etc/ssh/sshd_config AllowUsers user1 user2
Lưu và đóng tệp. Khởi động lại daemon để áp dụng thay đổi.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Nếu bạn thích quản lý nhóm người dùng, bạn có thể sử dụng chỉ thị AllowGroups
thay vì. Nếu bạn làm vậy, chỉ cần thêm một nhóm duy nhất được phép truy cập SSH (chúng ta sẽ tạo nhóm này và thêm thành viên sau):
/etc/ssh/sshd_config AllowGroups sshmembers
Lưu và đóng tệp.
Bây giờ, bạn có thể tạo một nhóm hệ thống (không có thư mục home) khớp với nhóm mà bạn đã chỉ định bằng cách gõ:
sudo groupadd -r sshmembers
Đảm bảo thêm các tài khoản người dùng cần thiết vào nhóm này. Điều này có thể làm bằng lệnh:
sudo usermod -a -G sshmembers user1 sudo usermod -a -G sshmembers user2
Bây giờ, khởi động lại daemon SSH để áp dụng thay đổi.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Tắt đăng nhập Root
Thông thường, bạn nên hoàn toàn tắt đăng nhập root qua SSH sau khi bạn đã thiết lập một tài khoản người dùng SSH có quyền sudo.
Để làm điều này, mở tệp cấu hình daemon SSH với quyền root hoặc sudo trên máy chủ từ xa của bạn:
sudo nano /etc/ssh/sshd_config
Tìm kiếm một chỉ thị có tên PermitRootLogin
. Nếu nó bị chú thích, bạn hãy bỏ chú thích nó. Thay đổi giá trị của nó thành “no”:
/etc/ssh/sshd_config PermitRootLogin no
Lưu và đóng tệp. Để áp dụng thay đổi, khởi động lại daemon SSH.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Cho phép truy cập Root cho các lệnh cụ thể
Có một số trường hợp bạn muốn tắt quyền truy cập root nói chung, nhưng cho phép root thực thi một số ứng dụng nhất định. Ví dụ có thể là một quy trình sao lưu.
Điều này có thể thực hiện qua tệp authorized_keys
của người dùng root, chứa các khóa SSH được phép sử dụng tài khoản này.
Thêm khóa từ máy tính cục bộ của bạn mà bạn muốn sử dụng cho quy trình này (chúng tôi khuyến nghị tạo một khóa mới cho mỗi quy trình tự động) vào tệp authorized_keys
của người dùng root trên máy chủ. Chúng tôi sẽ minh họa với lệnh ssh-copy-id
ở đây, nhưng bạn có thể sử dụng bất kỳ phương pháp sao chép khóa nào mà chúng ta đã thảo luận trong các phần khác:
ssh-copy-id root@remote_host
Bây giờ, đăng nhập vào máy chủ từ xa. Chúng ta sẽ cần điều chỉnh mục nhập trong tệp authorized_keys
, vì vậy hãy mở nó với quyền root hoặc sudo:
sudo nano /root/.ssh/authorized_keys
Ở đầu dòng với khóa bạn đã tải lên, thêm một lệnh command=
xác định lệnh mà khóa này hợp lệ để thực thi. Lệnh này nên bao gồm đầy đủ đường dẫn đến tệp thực thi, cộng với bất kỳ tham số nào:
/root/.ssh/authorized_keys command="/path/to/command arg1 arg2" ssh-rsa ...
Lưu và đóng tệp khi bạn xong.
Bây giờ, mở tệp sshd_config
với quyền root hoặc sudo:
sudo nano /etc/ssh/sshd_config
Tìm chỉ thị PermitRootLogin
và thay đổi giá trị của nó thành forced-commands-only
. Điều này sẽ chỉ cho phép đăng nhập SSH của người dùng root khi một lệnh đã được chỉ định cho khóa:
/etc/ssh/sshd_config PermitRootLogin forced-commands-only
Lưu và đóng tệp. Khởi động lại daemon SSH để áp dụng thay đổi.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Chuyển tiếp màn hình ứng dụng X đến Client
Daemon SSH có thể được cấu hình để tự động chuyển tiếp màn hình của các ứng dụng X trên máy chủ đến máy khách. Để điều này hoạt động đúng, máy khách phải có hệ thống X windows được cấu hình và kích hoạt.
Để kích hoạt tính năng này, đăng nhập vào máy chủ từ xa của bạn và chỉnh sửa tệp sshd_config
với quyền root hoặc sudo:
sudo nano /etc/ssh/sshd_config
Tìm chỉ thị X11Forwarding
. Nếu nó bị chú thích, bạn hãy bỏ chú thích nó. Tạo nó nếu cần và thiết lập giá trị của nó thành “yes”:
/etc/ssh/sshd_config X11Forwarding yes
Lưu và đóng tệp. Khởi động lại daemon SSH để thực thi thay đổi.
Trên Ubuntu/Debian:
sudo service ssh restart
Trên CentOS/Fedora:
sudo service sshd restart
Để kết nối đến máy chủ và chuyển tiếp màn hình của một ứng dụng, bạn cần chỉ định tùy chọn -X
từ phía máy khách khi kết nối:
ssh -X username@remote_host
Các ứng dụng đồ họa được khởi chạy trên máy chủ thông qua phiên này sẽ được hiển thị trên máy tính cục bộ. Hiệu suất có thể hơi chậm, nhưng nó rất hữu ích trong trường hợp khẩn cấp.
Tùy chọn cấu hình phía Client
Định nghĩa thông tin kết nối dành riêng cho từng máy chủ
Trên máy tính cục bộ của bạn, bạn có thể định nghĩa các cấu hình riêng biệt cho một số hoặc tất cả các máy chủ mà bạn kết nối. Các cấu hình này được lưu trong tệp ~/.ssh/config
, tệp này sẽ được SSH client đọc mỗi lần bạn sử dụng SSH.
Tạo hoặc mở tệp này bằng trình soạn thảo văn bản:
nano ~/.ssh/config
Bên trong tệp, bạn có thể định nghĩa các tùy chọn cấu hình cá nhân bằng cách sử dụng từ khóa Host
, theo sau là một bí danh. Bên dưới đó, thụt lề dòng và định nghĩa các chỉ thị như trong trang hướng dẫn man ssh_config
:
man ssh_config
Ví dụ cấu hình:
~/.ssh/config Host testhost HostName your_domain Port 4444 User demo
Bạn có thể kết nối đến your_domain
trên cổng 4444
với tên người dùng demo
chỉ bằng cách gõ:
ssh testhost
Bạn cũng có thể dùng ký tự đại diện (wildcards) để áp dụng cho nhiều máy chủ. Lưu ý rằng các dòng cấu hình ở sau có thể ghi đè các dòng ở trước, do đó nên để các cấu hình chung nhất ở đầu tệp:
Host * ForwardX11 no Host testhost HostName your_domain ForwardX11 yes Port 4444 User demo
Giữ kết nối SSH để tránh bị ngắt
Nếu bạn thường xuyên bị ngắt kết nối SSH, có thể do kết nối bị hết thời gian chờ (timeout).
Bạn có thể cấu hình máy client gửi gói tin đến server theo định kỳ để giữ kết nối. Thực hiện điều này bằng cách chỉnh sửa tệp ~/.ssh/config
:
nano ~/.ssh/config
Thêm dòng sau vào đầu tệp (hoặc trong phần Host *
nếu đã có):
Host * ServerAliveInterval 120
Dòng này yêu cầu client gửi tín hiệu đến server mỗi 2 phút để giữ kết nối.
Tắt kiểm tra host
Mặc định, khi kết nối tới một máy chủ mới, bạn sẽ thấy cảnh báo xác minh dấu vân tay SSH:
The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Điều này được cấu hình để bạn có thể xác minh tính xác thực của máy chủ mà bạn đang cố gắng kết nối, đồng thời phát hiện các trường hợp mà kẻ tấn công có thể đang cố giả mạo làm máy chủ từ xa.
Trong một số trường hợp nhất định, bạn có thể muốn vô hiệu hóa tính năng này. Lưu ý: Đây có thể là một rủi ro bảo mật nghiêm trọng, vì vậy hãy đảm bảo rằng bạn hiểu rõ những gì mình đang làm nếu quyết định thiết lập hệ thống theo cách này.
Nếu bạn muốn tắt chức năng này (Lưu ý: nguy hiểm về bảo mật), hãy mở tệp ~/.ssh/config
:
nano ~/.ssh/config
Nếu trong tập tin chưa có phần cấu hình nào, hãy thêm một mục ở đầu tập tin để áp dụng cho tất cả các máy chủ. Thiết lập tùy chọn StrictHostKeyChecking
thành no
để tự động thêm các máy chủ mới vào tập tin known_hosts
. Thiết lập UserKnownHostsFile
thành /dev/null
để không hiển thị cảnh báo khi gặp máy chủ mới hoặc khi có sự thay đổi về máy chủ.
Host * StrictHostKeyChecking no UserKnownHostsFile /dev/null
Bạn có thể bật lại tính năng kiểm tra này theo từng trường hợp cụ thể bằng cách đảo ngược các tùy chọn đó cho những máy chủ khác. Giá trị mặc định của StrictHostKeyChecking
là ask
(hỏi người dùng trước khi thêm máy chủ mới vào danh sách tin cậy).
~/.ssh/config Host * StrictHostKeyChecking no UserKnownHostsFile /dev/null Host testhost HostName your_domain StrictHostKeyChecking ask UserKnownHostsFile /home/demo/.ssh/known_hosts
Sử dụng multiplexing để chia sẻ kết nối TCP
Trong một số trường hợp, việc thiết lập một kết nối TCP mới có thể mất nhiều thời gian hơn mong muốn. Nếu bạn thực hiện nhiều kết nối tới cùng một máy chủ, bạn có thể tận dụng tính năng multiplexing (đa kênh) của SSH.
SSH multiplexing cho phép tái sử dụng cùng một kết nối TCP cho nhiều phiên SSH khác nhau. Điều này giúp loại bỏ một số công đoạn cần thiết để thiết lập phiên mới, có thể tăng tốc độ kết nối. Việc giới hạn số lượng kết nối cũng có thể hữu ích trong nhiều trường hợp.
Cách thiết lập SSH multiplexing:
Bạn có thể thiết lập thủ công từng kết nối hoặc cấu hình để client SSH của bạn tự động sử dụng multiplexing khi có thể. Ở đây, chúng ta sẽ minh họa cách thứ hai.
Trên máy tính cục bộ, hãy chỉnh sửa tệp cấu hình SSH client:
nano ~/.ssh/config
Nếu chưa có phần khai báo wildcard (ký tự đại diện), hãy thêm phần sau ở đầu tệp (sử dụng Host *
). Chúng ta sẽ thiết lập các giá trị ControlMaster
, ControlPath
, và ControlPersist
để kích hoạt multiplexing.
- ControlMaster nên được đặt là
auto
để cho phép SSH tự động sử dụng multiplexing nếu có thể. - ControlPath xác định đường dẫn đến file socket điều khiển. Phiên SSH đầu tiên sẽ tạo ra socket này, và các phiên tiếp theo sẽ sử dụng lại.
- ControlPersist đặt là
1
nghĩa là kết nối TCP sẽ tự động đóng sau 1 giây kể từ khi phiên SSH cuối cùng kết thúc.
Ví dụ cấu hình:
/.ssh/config Host * ControlMaster auto ControlPath ~/.ssh/multiplex/%r@%h:%p ControlPersist 1
Sau đó, bạn cần tạo thư mục mà bạn đã chỉ định trong ControlPath
:
mkdir ~/.ssh/multiplex
Từ giờ, bất kỳ phiên SSH nào được thiết lập đến cùng một máy chủ sẽ cố gắng sử dụng socket và kết nối TCP đã tồn tại. Khi phiên cuối cùng kết thúc, kết nối sẽ tự động đóng sau 1 giây.
Nếu vì lý do nào đó bạn muốn tạm thời không sử dụng multiplexing, bạn có thể dùng tùy chọn -S none
khi kết nối:
ssh -S none username@remote_host
Thiết lập các kênh (tunnel) SSH
Tunneling lưu lượng mạng thông qua một kênh SSH an toàn là một cách tuyệt vời để vượt qua các cài đặt tường lửa khắt khe. Nó cũng là một phương pháp tốt để mã hóa những lưu lượng mạng vốn không được mã hóa.
Cấu hình Tunneling cục bộ đến máy chủ
Các kết nối SSH có thể được sử dụng để chuyển tiếp lưu lượng từ các cổng trên máy cục bộ đến các cổng trên máy chủ từ xa.
Kết nối local (cục bộ) là một cách để truy cập một vị trí mạng từ máy tính cục bộ của bạn thông qua máy chủ từ xa. Trước tiên, một kết nối SSH được thiết lập tới máy chủ từ xa. Trên máy chủ từ xa, một kết nối được tạo đến một địa chỉ mạng bên ngoài (hoặc nội bộ) do người dùng cung cấp, và lưu lượng truy cập tới địa chỉ này sẽ được chuyển tiếp (tunnel) đến máy tính cục bộ của bạn thông qua một cổng (port) được chỉ định.
Cách làm này thường được sử dụng để chuyển lưu lượng truy cập đến một môi trường mạng ít bị hạn chế hơn bằng cách vượt qua tường lửa. Một ứng dụng phổ biến khác là để truy cập một giao diện web chỉ khả dụng trên “localhost” từ một vị trí từ xa.
Để thiết lập một tunnel local đến máy chủ từ xa của bạn, bạn cần sử dụng tham số -L
khi kết nối SSH và cung cấp ba thông tin bổ sung:
- Cổng cục bộ mà bạn muốn sử dụng để truy cập kết nối được chuyển tiếp.
- Host mà bạn muốn máy chủ từ xa kết nối đến.
- Cổng mà bạn muốn máy chủ từ xa kết nối đến trên host đó.
Ba thông tin này được truyền vào tham số -L
theo thứ tự trên, cách nhau bằng dấu hai chấm (:). Ngoài ra, ta sử dụng thêm cờ -f
(đưa SSH chạy nền trước khi thực thi) và -N
(không mở shell hoặc thực hiện lệnh trên máy chủ từ xa).
Các tham số trên được truyền vào cờ -L
theo đúng thứ tự đã nêu (cách nhau bằng dấu hai chấm). Ta cũng sẽ sử dụng thêm cờ -f
, cho phép SSH chạy ở chế độ nền trước khi thực thi, và cờ -N
, để không mở shell hoặc thực thi bất kỳ chương trình nào trên máy chủ từ xa.
Ví dụ, để kết nối đến your_domain
qua cổng 80 trên máy chủ từ xa, và làm cho kết nối này khả dụng trên máy cục bộ tại cổng 8888, bạn có thể dùng lệnh:
ssh -f -N -L 8888:your_domain:80 username@remote_host
Bây giờ, nếu bạn mở trình duyệt web trên máy cục bộ và truy cập vào địa chỉ 127.0.0.1:8888
, bạn sẽ thấy nội dung từ your_domain
tại cổng 80.
Cú pháp tổng quát hơn của lệnh này là:
ssh -L cổng_cục_bộ:địa_chỉ_hoặc_IP_cần_truy_cập:cổng_đích username@host
Vì kết nối đang chạy nền, bạn sẽ cần tìm PID (ID của tiến trình) để có thể dừng nó. Có thể làm điều này bằng cách tìm tiến trình đang sử dụng cổng mà bạn đã chuyển tiếp:
ps aux | grep 8888
Ví dụ kết quả:
1001 5965 0.00.0481681136?Ss12:280:00ssh-f-N-L8888:your_domain:80username@remote_host 1001 6113 0.00.013648952pts/2S+12:370:00grep--colour=auto8888
Bạn có thể dừng tiến trình bằng cách sử dụng PID (số ở cột thứ hai của dòng chứa lệnh SSH):
kill 5965
Một lựa chọn khác là không sử dụng cờ -f
khi thiết lập kết nối. Điều này sẽ giữ kết nối ở chế độ foreground (nổi), nghĩa là bạn sẽ không thể sử dụng terminal cho việc khác khi tunnel đang hoạt động. Tuy nhiên, bạn có thể dễ dàng dừng tunnel này bất cứ lúc nào chỉ bằng cách nhấn CTRL-C
.
Cấu hình Remote Tunneling tới Máy chủ từ xa
Kết nối SSH có thể được sử dụng để chuyển tiếp lưu lượng từ các cổng trên máy cục bộ đến các cổng trên máy chủ từ xa.
Trong remote tunnel (tunnel từ xa), một kết nối được thiết lập tới máy chủ từ xa. Trong quá trình tạo tunnel, một cổng từ xa được chỉ định. Cổng này, trên máy chủ từ xa, sẽ được chuyển tiếp đến một cổng và địa chỉ máy chủ kết nối từ máy cục bộ. Điều này cho phép máy tính từ xa truy cập một máy chủ thông qua máy cục bộ của bạn.
Điều này có thể hữu ích nếu bạn cần cấp quyền truy cập vào một mạng nội bộ bị hạn chế kết nối bên ngoài. Nếu tường lửa cho phép kết nối ra ngoài, bạn có thể kết nối tới một máy từ xa và chuyển tiếp lưu lượng từ máy này đến một địa chỉ trong mạng nội bộ.
Để thiết lập một remote tunnel tới máy chủ từ xa của bạn, bạn cần sử dụng tham số -R
khi kết nối và cung cấp ba thông tin bổ sung:
- Cổng mà máy chủ từ xa có thể truy cập kết nối được chuyển tiếp.
- Host mà bạn muốn máy cục bộ kết nối tới.
- Cổng mà bạn muốn máy cục bộ kết nối tới trên host đó.
Ba thông tin này được truyền vào tham số -R
theo thứ tự trên, cách nhau bằng dấu hai chấm (:). Ta cũng sử dụng thêm cờ -f
, để SSH chạy ở chế độ nền trước khi thực thi, và cờ -N
, để không mở shell hoặc thực thi chương trình trên máy chủ từ xa.
Ví dụ, để kết nối đến your_domain
trên cổng 80 trên máy cục bộ và làm cho kết nối này khả dụng trên máy chủ từ xa tại cổng 8888, bạn có thể gõ lệnh:
ssh -f -N -R 8888:your_domain:80 username@remote_host
Bây giờ, trên máy chủ từ xa, bạn chỉ cần mở trình duyệt web và truy cập vào địa chỉ 127.0.0.1:8888
để xem nội dung từ your_domain
tại cổng 80.
Cú pháp tổng quát cho lệnh này là:
ssh -R cổng_từ_xa:địa_chỉ_hoặc_IP_cần_truy_cập:cổng_đích username@host
Vì kết nối đang chạy nền, bạn sẽ cần tìm PID (ID của tiến trình) để dừng nó. Bạn có thể làm điều này bằng cách tìm tiến trình sử dụng cổng bạn đã chuyển tiếp:
ps aux | grep 8888
Ví dụ kết quả:
1001 5965 0.00.0481681136?Ss12:280:00ssh-f-N-R8888:your_domain:80username@remote_host 1001 6113 0.00.013648952pts/2S+12:370:00grep--colour=auto8888
Bạn có thể dừng tiến trình bằng cách sử dụng PID (số ở cột thứ hai của dòng chứa lệnh SSH):
kill 5965
Một lựa chọn khác là không sử dụng cờ -f
khi thiết lập kết nối. Điều này sẽ giữ kết nối ở chế độ foreground (nổi), nghĩa là bạn sẽ không thể sử dụng terminal cho việc khác khi tunnel đang hoạt động. Tuy nhiên, bạn có thể dễ dàng dừng tunnel này bất cứ lúc nào chỉ bằng cách nhấn CTRL-C
.
Cấu hình Dynamic Tunneling tới Máy chủ từ xa
Kết nối SSH có thể được sử dụng để chuyển tiếp lưu lượng từ các cổng trên máy cục bộ đến các cổng trên máy chủ từ xa.
Dynamic tunnel (tunnel động) tương tự như local tunnel (tunnel cục bộ) ở chỗ nó cho phép máy tính cục bộ kết nối đến các tài nguyên khác thông qua một máy chủ từ xa. Tuy nhiên, khác với local tunnel, dynamic tunnel chỉ yêu cầu chỉ định một cổng cục bộ duy nhất. Các ứng dụng muốn sử dụng cổng này để chuyển tiếp lưu lượng phải có khả năng giao tiếp qua giao thức SOCKS, để các gói dữ liệu có thể được chuyển tiếp chính xác ở phía bên kia của tunnel.
Lưu lượng được gửi đến cổng cục bộ này sẽ được chuyển tiếp đến máy chủ từ xa. Tại đây, giao thức SOCKS sẽ được giải mã để thiết lập kết nối tới địa chỉ đích mong muốn. Cấu hình này cho phép một ứng dụng hỗ trợ SOCKS kết nối tới nhiều địa chỉ khác nhau thông qua máy chủ từ xa, mà không cần phải thiết lập nhiều tunnel tĩnh.
Để thiết lập kết nối, bạn sẽ sử dụng cờ -D
kèm theo cổng cục bộ mà bạn muốn sử dụng để truy cập tunnel. Ngoài ra, bạn sẽ sử dụng cờ -f
, để SSH chạy ở chế độ nền trước khi thực thi, và cờ -N
, để không mở shell hoặc thực thi chương trình trên máy chủ từ xa.
Ví dụ, để thiết lập tunnel trên cổng 7777, bạn có thể gõ lệnh:
ssh -f -N -D 7777 username@remote_host
Sau đó, bạn có thể cấu hình ứng dụng hỗ trợ SOCKS (ví dụ như trình duyệt web) để sử dụng cổng mà bạn đã chọn. Ứng dụng sẽ gửi dữ liệu của nó vào socket liên kết với cổng này.
Cách thức cấu hình ứng dụng để sử dụng cổng SOCKS sẽ khác nhau tùy vào ứng dụng. Ví dụ, trong Firefox, bạn có thể vào Preferences > Advanced > Settings > Manual proxy configurations. Trong Chrome, bạn có thể khởi động ứng dụng với cờ --proxy-server=
kèm theo. Bạn sẽ cần sử dụng giao diện localhost và cổng đã được chuyển tiếp.
Vì kết nối đang chạy nền, bạn sẽ cần tìm PID (ID của tiến trình) để dừng nó. Bạn có thể làm điều này bằng cách tìm tiến trình đang sử dụng cổng bạn đã chuyển tiếp:
ps aux | grep 7777
Ví dụ kết quả:
1001 5965 0.00.0481681136?Ss12:280:00ssh-f-N-D7777 username@remote_host 1001 6113 0.00.013648952pts/2S+12:370:00grep--colour=auto7777
Bạn có thể dừng tiến trình bằng cách sử dụng PID (số ở cột thứ hai của dòng chứa lệnh SSH):
kill 5965
Một lựa chọn khác là không sử dụng cờ -f
khi thiết lập kết nối. Điều này sẽ giữ kết nối ở chế độ foreground (nổi), nghĩa là bạn sẽ không thể sử dụng terminal cho việc khác khi tunnel đang hoạt động. Tuy nhiên, bạn có thể dễ dàng dừng tunnel này bất cứ lúc nào chỉ bằng cách nhấn CTRL-C
.
Sử dụng SSH Escape Codes để điều khiển kết nối
Ngay cả khi kết nối SSH đã được thiết lập, bạn vẫn có thể điều khiển kết nối từ trong terminal. Điều này có thể thực hiện được nhờ vào các SSH escape codes, cho phép bạn tương tác với phần mềm SSH cục bộ của mình từ trong một phiên làm việc.
Buộc ngắt kết nối từ phía Client
Một trong những tính năng hữu ích của OpenSSH mà ít người chú ý là khả năng điều khiển một số khía cạnh của phiên làm việc từ bên trong.
Các lệnh này có thể được thực thi bắt đầu với ký tự điều khiển ~ trong một phiên SSH. Các lệnh điều khiển chỉ được hiểu nếu chúng là thứ đầu tiên bạn gõ sau khi nhấn ENTER, vì vậy hãy đảm bảo nhấn ENTER một hoặc hai lần trước khi sử dụng.
Một trong những điều khiển hữu ích nhất là khả năng ngắt kết nối từ phía client. Các kết nối SSH thường bị đóng từ phía server, nhưng điều này có thể gặp vấn đề nếu server gặp sự cố hoặc nếu kết nối bị mất. Bằng cách sử dụng ngắt kết nối từ phía client, kết nối có thể được đóng sạch sẽ từ phía client.
Để đóng kết nối từ phía client, sử dụng ký tự điều khiển ~, theo sau là dấu chấm. Nếu kết nối của bạn gặp vấn đề, bạn sẽ có thể thấy một phiên terminal có vẻ như bị đóng băng. Hãy gõ lệnh này mặc dù không có phản hồi để thực hiện ngắt kết nối từ phía client:
[ENTER] ~.
Kết nối sẽ ngay lập tức đóng, đưa bạn trở lại phiên shell cục bộ.
Đưa phiên SSH vào nền
Một trong những tính năng hữu ích khác của OpenSSH mà ít người chú ý là khả năng điều khiển một số khía cạnh của phiên làm việc từ trong kết nối.
Các lệnh này có thể được thực thi bắt đầu với ký tự điều khiển ~ từ trong một kết nối SSH. Các lệnh điều khiển chỉ được hiểu nếu chúng là thứ đầu tiên bạn gõ sau khi nhấn ENTER, vì vậy hãy đảm bảo nhấn ENTER một hoặc hai lần trước khi sử dụng.
Một khả năng mà tính năng này cung cấp là đưa phiên SSH vào nền. Để làm điều này, bạn cần cung cấp ký tự điều khiển ~ và sau đó thực hiện phím tắt thông thường để đưa một tác vụ vào nền (CTRL-z):
[ENTER] ~[CTRL-z]
Điều này sẽ đưa kết nối vào nền, trả lại bạn với shell cục bộ. Để quay lại phiên SSH, bạn có thể sử dụng cơ chế điều khiển công việc thông thường.
Bạn có thể kích hoạt lại tác vụ nền gần nhất của mình ngay lập tức bằng cách gõ:
fg
Nếu bạn có nhiều tác vụ đã được đưa vào nền, bạn có thể xem các công việc có sẵn bằng cách gõ:
jobs
Ví dụ kết quả:
[1]+ Stopped ssh username@some_host [2] Stopped ssh username@another_host
Sau đó, bạn có thể đưa bất kỳ tác vụ nào trở lại foreground bằng cách sử dụng chỉ số trong cột đầu tiên với dấu phần trăm:
fg %2
Thay đổi tùy chọn chuyển tiếp cổng trên một kết nối SSH đã có
Một trong những tính năng hữu ích của OpenSSH mà ít người chú ý là khả năng điều khiển một số khía cạnh của phiên làm việc từ trong kết nối.
Các lệnh này có thể được thực thi bắt đầu với ký tự điều khiển ~ từ trong một kết nối SSH. Các lệnh điều khiển chỉ được hiểu nếu chúng là thứ đầu tiên bạn gõ sau khi nhấn ENTER, vì vậy hãy đảm bảo nhấn ENTER một hoặc hai lần trước khi sử dụng.
Một điều cho phép người dùng là thay đổi cấu hình chuyển tiếp cổng sau khi kết nối đã được thiết lập. Điều này cho phép bạn tạo hoặc hủy bỏ các quy tắc chuyển tiếp cổng ngay lập tức.
Các tính năng này là một phần của giao diện dòng lệnh SSH, có thể truy cập trong phiên làm việc bằng cách sử dụng ký tự điều khiển ~ và “C”:
[ENTER] ~C ssh>
Bạn sẽ được đưa đến một dấu nhắc lệnh SSH, nơi có một bộ lệnh hợp lệ rất hạn chế. Để xem các tùy chọn có sẵn, bạn có thể gõ -h từ dấu nhắc này. Nếu không có gì được trả về, bạn có thể cần phải tăng độ chi tiết của đầu ra SSH bằng cách sử dụng ~v vài lần:
[ENTER] ~v ~v ~v ~C -h
Kết quả trả về sẽ như sau:
Commands: -L[bind_address:]port:host:hostport Request local forward -R[bind_address:]port:host:hostport Request remote forward -D[bind_address:]port Request dynamic forward -KL[bind_address:]port Cancel local forward -KR[bind_address:]port Cancel remote forward -KD[bind_address:]port Cancel dynamic forward
Như bạn có thể thấy, bạn có thể dễ dàng thực hiện bất kỳ tùy chọn chuyển tiếp nào bằng các tham số thích hợp (xem phần chuyển tiếp cổng để biết thêm thông tin). Bạn cũng có thể hủy bỏ một tunnel bằng lệnh “kill” kèm theo chữ “K” trước chữ cái của loại chuyển tiếp. Ví dụ, để hủy bỏ một chuyển tiếp cổng cục bộ (-L), bạn có thể sử dụng lệnh -KL. Bạn chỉ cần cung cấp cổng cho lệnh này.
Vì vậy, để thiết lập một chuyển tiếp cổng cục bộ, bạn có thể gõ:
[ENTER] ~C -L 8888:127.0.0.1:80
Cổng 8888 trên máy cục bộ của bạn giờ đây có thể giao tiếp với máy chủ web trên máy bạn đang kết nối đến. Khi bạn hoàn thành, bạn có thể hủy bỏ chuyển tiếp đó bằng cách gõ:
[ENTER] ~C -KL 8888
Kết luận
Những hướng dẫn trên đã bao quát hầu hết các thông tin cần thiết về SSH mà người dùng có thể sử dụng trong công việc hàng ngày. Nếu bạn có thêm mẹo, thủ thuật hoặc muốn chia sẻ các cấu hình và phương pháp yêu thích của mình, hãy tự do chia sẻ trong phần bình luận dưới đây.