Trang chủHướng dẫnSSH là gì? Hướng dẫn cách sử dụng SSH cho người mới bắt đầu
Chuyên gia

SSH là gì? Hướng dẫn cách sử dụng SSH cho người mới bắt đầu

CyStack blog 29 phút để đọc
CyStack blog23/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 29 minutes

Nếu bạn đã từng làm việc với các máy chủ Linux từ xa, chắc hẳn bạn đã quen thuộc với SSH. Nó không chỉ là một công cụ kết nối, mà còn là xương sống cho việc quản lý và bảo mật hạ tầng server của chúng ta.

Bài viết này sẽ đi sâu tìm hiểu SSH là gì, cách sử dụng SSH, từ cách nó xác thực người dùng cho đến việc tạo và quản lý các cặp khóa SSH, cũng như các tùy chọn cấu hình linh hoạt cả ở phía client lẫn server. Việc nắm vững SSH không chỉ giúp công việc hàng ngày của bạn suôn sẻ hơn mà còn tăng cường đáng kể tính bảo mật cho hệ thống.

cách sử dụng SSH

SSH là gì

Cách phổ biến nhất để kết nối đến một máy chủ Linux từ xa là thông qua SSH. SSH là viết tắt của Secure Shell và nó cung cấp một cách an toàn và bảo mật để thực thi các lệnh, thực hiện thay đổi và cấu hình các dịch vụ từ xa. Khi bạn kết nối qua SSH, bạn sẽ đăng nhập bằng một tài khoản tồn tại trên máy chủ từ xa.

Cách SSH Hoạt Động

Khi bạn kết nối qua SSH, bạn sẽ được đưa vào một phiên shell, đây là một giao diện nơi bạn có thể tương tác với máy chủ của mình. Trong suốt thời gian phiên SSH của bạn, bất kỳ lệnh nào bạn nhập vào terminal cục bộ đều được gửi qua một đường hầm SSH được mã hóa (encrypted SSH tunnel) và được thực thi trên máy chủ của bạn.

Kết nối SSH được triển khai bằng cách sử dụng mô hình client-server. Điều này có nghĩa là để một kết nối SSH được thiết lập, máy từ xa phải đang chạy một phần mềm được gọi là SSH daemon. Phần mềm này 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à tạo ra môi trường thích hợp 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ó một SSH client. Đây là một phần mềm biết cách giao tiếp bằng giao thức SSH và có thể được cung cấp thông tin về máy chủ từ xa để kết nối, tên người dùng để sử dụng và thông tin xác thực cần được truyền để xác thực. Client cũng có thể chỉ định các chi tiết cụ thể về loại kết nối mà họ 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 mật khẩu (kém an toàn hơn và không được khuyến nghị) hoặc SSH keys, vốn rất an toàn.

Đăng nhập bằng mật khẩu sẽ dễ hiểu đối với người dùng mới. Tuy nhiên, điều này có thể dẫn đến các lỗ hổng bảo mật như tấn công brute force mật khẩu. Vì lý do này, chúng tôi khuyên bạn nên luôn thiết lập xác thực dựa trên SSH key cho hầu hết các cấu hình.

SSH keys là một bộ khóa mã hóa khớp nhau có thể được sử dụng để xác thực. Mỗi bộ chứa một khóa công khai (public key) và một khóa riêng (private key). Khóa công khai có thể được chia sẻ tự do mà không cần lo lắng, trong khi khóa riêng phải được bảo vệ cẩn thận và không bao giờ được tiết lộ cho bất kỳ ai.

Để xác thực bằng SSH keys, người dùng phải có một cặp khóa SSH trên máy tính cục bộ của họ. Trên máy chủ từ xa, khóa công khai phải được sao chép vào một tệp trong thư mục chính của người dùng tại ~/.ssh/authorized_keys. Tệp này chứa một danh sách các khóa công khai, mỗi khóa trên một dòng, được ủy quyền để đăng nhập vào tài khoản.

Khi một client kết nối đến máy chủ, muốn sử dụng xác thực SSH key, nó sẽ thông báo cho máy chủ về ý định này và cho máy chủ biết khóa công khai nào cần sử dụng. Máy chủ sau đó kiểm tra tệp authorized_keys của nó để tìm khóa công khai, tạo một chuỗi ngẫu nhiên và mã hóa nó bằng khóa công khai. Thông báo được mã hóa này chỉ có thể được giải mã bằng khóa riêng liên quan. Máy chủ sẽ gửi thông báo được mã hóa này cho client để kiểm tra xem họ có thực sự sở hữu khóa riêng liên quan hay không.

Khi nhận được thông báo này, client sẽ giải mã nó bằng khóa riêng và kết hợp chuỗi ngẫu nhiên được tiết lộ với một ID phiên đã được thỏa thuận trước đó. Sau đó, nó tạo một hàm băm MD5 của giá trị này và truyền lại cho máy chủ. Máy chủ đã có thông báo gốc và ID phiên, vì vậy nó có thể so sánh một hàm băm MD5 được tạo bởi các giá trị đó và xác định rằng client phải có khóa riêng.

Bây giờ bạn đã biết cách SSH hoạt động, chúng ta có thể bắt đầu thảo luận về một số ví dụ để minh họa các cách khác nhau để làm việc với SSH.

Tạo và làm việc với SSH Keys

Phần này sẽ trình bày cách tạo SSH keys trên máy client và phân phối khóa công khai đến các máy chủ nơi chúng nên được sử dụng. Đây là một phần tốt để bắt đầu nếu bạn chưa tạo khóa trước đây.

Tạo một cặp SSH Key

Tạo một cặp khóa công khai và khóa riêng SSH mới trên máy tính cục bộ của bạn là bước đầu tiên để xác thực với máy chủ từ xa mà không cần mật khẩu. Trừ khi có lý do chính đáng, bạn nên luôn xác thực bằng SSH keys.

Một số thuật toán mã hóa có thể được sử dụng để tạo SSH keys, bao gồm RSA, DSA và ECDSA. Khóa RSA thường được ưu tiên và là loại khóa mặc định. Để tạo một cặp khóa RSA trên máy tính cục bộ của bạn, hãy nhập:

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 khóa riêng RSA của mình. Nhấn ENTER để lưu ở vị trí mặc định, nó sẽ lưu chúng trong thư mục ẩn .ssh trong thư mục chính của người dùng của bạn. Để mặc định sẽ cho phép client SSH của bạn tự động tìm thấy các khóa.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Lời nhắc tiếp theo cho phép bạn nhập một passphrase có độ dài tùy ý để bảo mật khóa riêng của mình. Là một biện pháp bảo mật bổ sung, bạn sẽ phải nhập bất kỳ passphrase nào bạn đặt ở đây mỗi khi bạn sử dụng khóa riêng. Bạn có thể nhấn ENTER để để trống nếu bạn không muốn có passphrase. Tuy nhiên, hãy nhớ rằng điều này sẽ cho phép bất kỳ ai giành quyền kiểm soát khóa riêng của bạn đăng nhập vào máy chủ của bạn. Nếu bạn chọn nhập passphrase, sẽ không có gì được hiển thị khi bạn gõ. Đây là một biện pháp phòng ngừa bảo mật.

OutputYour 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+    |
+-----------------+

Thủ tục này đã tạo ra một cặp khóa SSH RSA nằm trong thư mục ẩn .ssh trong thư mục chính của người dùng của bạn. Các tệp này là:

  • ~/.ssh/id_rsa: Khóa riêng. ĐỪNG CHIA SẺ TỆP NÀY!
  • ~/.ssh/id_rsa.pub: Khóa công khai liên quan. Cái này có thể được chia sẻ tự do mà không gây hậu quả. Lưu ý: Bạn có thể tham khảo hướng dẫn của chúng tôi về Tạo SSH keys với OpenSSH trên macOS hoặc Windows Subsystem.

Tạo một cặp SSH Key với số lượng Bit lớn hơn

SSH keys mặc định là 2048 bit. Điều này thường được coi là đủ tốt cho bảo mật, nhưng bạn có thể chỉ định số lượng bit lớn hơn để có một khóa cứng hơn. Để làm điều này, hãy bao gồm đối số -b với số lượng bit bạn muốn. Hầu hết các máy chủ hỗ trợ các khóa có độ dài ít nhất 4096 bit. Khóa dài hơn có thể không được chấp nhận cho mục đích bảo vệ DDOS:

ssh-keygen -b 4096

Nếu bạn đã tạo một khóa khác trước đó, bạn sẽ được hỏi liệu bạn có muốn ghi đè khóa trước đó của mình hay không:

Overwrite (y/n)?

Nếu bạn chọn “yes”, khóa trước đó của bạn sẽ bị ghi đè và bạn sẽ không thể đăng nhập vào máy chủ bằng khóa đó nữa. Vì lý do này, hãy chắc chắn ghi đè khóa một cách thận trọng.

Xóa hoặc thay đổi Passphrase

Nếu bạn đã tạo passphrase cho khóa riêng của mình và muốn thay đổi hoặc xóa nó, bạn có thể dễ dàng thực hiện. Lưu ý: Để thay đổi hoặc xóa passphrase, bạn phải biết passphrase gốc. Nếu bạn đã mất passphrase của khóa, không có cách nào khác và bạn sẽ phải tạo một cặp khóa mới. Để thay đổi hoặc xóa passphrase, chỉ cần nhập:

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 sửa đổi hoặc nhấn ENTER để chấp nhận giá trị mặc định:

Enter old passphrase:

Nhập passphrase cũ mà bạn muốn thay đổi. Sau đó, bạn sẽ được nhắc nhập passphrase mới:

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

Tại đây, nhập passphrase mới của bạn hoặc nhấn ENTER để xóa passphrase.

Hiển thị Fingerprint của SSH Key

Mỗi cặp khóa SSH chia sẻ một “fingerprint” mã hóa duy nhất có thể được sử dụng để xác định duy nhất các khóa. Điều này có thể hữu ích trong nhiều tình huống khác nhau. Để tìm fingerprint của một SSH key, hãy nhập:

ssh-keygen -l

Enter file in which the key is (/root/.ssh/id_rsa):

Bạn có thể nhấn ENTER nếu đó là vị trí chính xác 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, fingerprint, tài khoản và máy chủ mà nó được tạo ra và thuật toán được sử dụng:

Output4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e  demo@test (RSA)

Sao chép Public SSH Key của bạn đến máy chủ với SSH-Copy-ID

Để sao chép khóa công khai của bạn đến một máy chủ có một số cách tiếp cận có thể được thực hiện. Nếu bạn hiện đang có quyền truy cập SSH dựa trên mật khẩu đến máy chủ của mình và bạn đã cài đặt tiện ích ssh-copy-id thì quá trình này sẽ trở lên rất đơ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 nhập:

ssh-copy-id username@remote_host

Điều này sẽ nhắc bạn nhập mật khẩu 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 to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
demo@111.111.11.111's password:

Sau khi nhập mật khẩu, nội dung của khóa ~/.ssh/id_rsa.pub của bạn sẽ được nối vào cuối tệp ~/.ssh/authorized_keys của tài khoản người dùng:

OutputNumber of key(s) added: 1

Now try logging into the machine, with:   "ssh 'demo@111.111.11.111'"
and check to make sure that only the key(s) you wanted were added.

Bây giờ bạn có thể đăng nhập vào tài khoản đó mà không cần mật khẩu:

ssh username@remote_host

Sao chép Public SSH Key của bạn đến máy chủ mà không có SSH-Copy-ID

Nếu bạn không có tiện ích ssh-copy-id nhưng vẫn có quyền truy cập SSH dựa trên 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 một cách khác. Bạn có thể xuất nội dung của khóa và chuyển nó vào lệnh sshsau đó nối nội dung đã được chuyển 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 cung cấ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 to continue 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, cho phép bạn đăng nhập mà không cần mật khẩu:

ssh username@remote_IP_host

Sao chép Public SSH Key của bạn đến máy chủ thủ công

Nếu bạn không có quyền truy cập SSH dựa trên mật khẩu, bạn sẽ phải thêm khóa công khai của mình vào máy chủ từ xa theo cách thủ công. Trên máy cục bộ của bạn, bạn có thể tìm thấy nội dung của tệp khóa công khai của mình bằng cách nhập:

cat ~/.ssh/id_rsa.pub

Outputssh-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 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ác phương tiện 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 nối vào tệp ~/.ssh/authorized_keys bằng cách nhập:

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.

Hướng dẫn kết kối cơ bản

Phần sau đây sẽ trình bày một số kiến thức cơ bản về cách kết nối đến máy chủ với SSH.

Kết nối đến một máy chủ từ xa

Để kết nối đến một máy chủ từ xa và mở một phiên shell ở đó, bạn có thể sử dụng lệnh ssh. Dạng đơn giản nhất giả định rằng tên người dùng của bạn trên máy cục bộ giống với tên người dùng trên máy chủ từ xa. Nếu điều này đúng, bạn có thể kết nối bằng cách:

ssh remote_host

Nếu tên người dùng của bạn khác trên máy chủ từ xa, bạn cần truyền 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 trông giống 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 to continue connecting (yes/no)? yes

Nhập yes để chấp nhận tính xác thực của máy chủ từ xa. Nếu bạn đang sử dụng xác thực mật khẩu, bạn sẽ được nhắc nhập mật khẩu cho tài khoản từ xa tại đây. Nếu bạn đang sử dụng SSH keys, bạn sẽ được nhắc 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 một lệnh duy nhất trên máy chủ từ xa

Để chạy một lệnh duy nhất trên máy chủ từ xa thay vì tạo một phiên shell, bạn có thể thêm lệnh sau thông tin kết nối, như sau:

ssh username@remote_host command_to_run

Điều này sẽ kết nối đến máy chủ từ xa, xác thực bằng thông tin đăng nhập của bạn và thực thi lệnh bạn đã chỉ định. Kết nối sẽ đóng ngay sau đó.

Đăng nhập vào máy chủ với một cổng khác

Theo mặc định, SSH daemon trên máy chủ chạy trên cổng 22. Client SSH của bạn sẽ giả định điều này khi cố gắng kết nối. Nếu máy chủ SSH của bạn đang lắng nghe trên một cổng không chuẩn, bạn sẽ phải chỉ định số cổng mới khi kết nối với client của mình. 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 phải làm điều này mỗi khi bạn đăng nhập vào máy chủ từ xa, bạn có thể tạo hoặc chỉnh sửa 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ộ của bạn. Chỉnh sửa hoặc tạo tệp ngay bây giờ bằng cách nhập:

nano ~/.ssh/config

Tại đây, bạn có thể đặt các tùy chọn cấu hình dành riêng cho máy chủ. Để chỉ định cổng mới của bạn, hãy sử dụng định dạng như sau:

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 chỉ định số cổng cụ thể trên dòng lệnh.

Thêm SSH Keys của bạn vào SSH Agent để tránh nhập Passphrase

Nếu bạn có một passphrase trên khóa riêng SSH của mình, bạn sẽ được nhắc nhập passphrase mỗi khi bạn sử dụng nó để kết nối đến máy chủ từ xa. Để tránh phải lặp đi lặp lại điều này, bạn có thể chạy một SSH agent. Tiện ích nhỏ này 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 terminal của bạn, cho phép bạn kết nối trong tương lai mà không cần nhập lại passphrase. Điều này cũng quan trọng nếu bạn cần chuyển tiếp thông tin đăng nhập SSH của mình (sẽ được trình bày sau). Để khởi động SSH Agent, hãy nhập lệnh sau vào phiên terminal cục bộ của bạn:

eval $(ssh-agent)

OutputAgent 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

Enter passphrase for /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 của mình. Sau đó, tệp định danh của bạn được thêm vào agent, cho phép bạn sử dụng khóa của mình để đăng nhập mà không cần nhập lại passphrase.

Chuyển tiếp thông tin đăng nhập SSH

Nếu bạn muốn có thể kết nối mà không cần mật khẩu đến một máy chủ từ trong một máy chủ khác, bạn sẽ cần chuyển tiếp thông tin khóa SSH của mình. Điều này sẽ cho phép bạn xác thực đến một máy chủ khác thông qua máy chủ bạn đã kết nối, sử dụng thông tin đăng nhập trên máy tính cục bộ của bạn. Để bắt đầu, bạn phải có SSH agent đã khởi động và SSH key của bạn đã được thêm vào agent (xem phần trước). Sau khi hoàn tất, bạn cần kết nối đến máy chủ đầu tiên bằng cách sử dụng tùy chọn -A. Điều này chuyển tiếp thông tin đăng nhập của bạn đến máy chủ cho phiên này:

ssh -A username@remote_host

Từ đây, bạn có thể SSH vào bất kỳ máy chủ nào khác mà SSH key của bạn được ủy quyền truy cập. Bạn sẽ kết nối như thể khóa riêng SSH của bạn nằm trên máy chủ này.

Tùy chọn cấu hình phía máy chủ (Server-Side)

Phần này chứa một số tùy chọn cấu hình phía máy chủ phổ biến có thể định hình cách máy chủ của bạn phản hồi và các loại kết nối được phép.

Vô hiệu hóa xác thực mật khẩu

Nếu bạn đã cấu hình, kiểm tra và SSH keys đang hoạt động đúng cách, có lẽ là một ý hay để vô hiệu hóa xác thực mật khẩu. Điều này sẽ ngăn bất kỳ người dùng nào đăng nhập bằng SSH bằng mật khẩu. Để làm điều này, hã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

Bên trong tệp, tìm chỉ thị PasswordAuthentication. Nếu nó bị nhận xét, hãy bỏ nhận xét. Đặt nó thành no để vô hiệu hóa đăng nhập bằng mật khẩu:

PasswordAuthentication no

Sau khi bạn đã thực hiện thay đổi, lưu và đóng tệp. Để thực hiện các thay đổi, bạn nê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 bằng SSH bằng mật khẩu.

Thay đổi cổng mà SSH Daemon Chạy

Một số quản trị viên đề xuất rằng bạn nên thay đổi cổng mặc định mà SSH chạy trên. Điều này có thể giúp giảm số lượng nỗ lực 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à SSH daemon lắng nghe, bạn sẽ phải đă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 bằng cách sử dụng sudo:

sudo nano /etc/ssh/sshd_config

Khi bạn đã vào bên trong, bạn có thể thay đổi cổng mà SSH chạy trên bằng cách tìm thông số Port 22 và sửa đổi nó để phản ánh cổng bạn muốn sử dụng. Ví dụ, để thay đổi cổng thành 4444, hãy đặt dòng này vào tệp của bạn:

#Port 22
Port 4444

Lưu và đóng tệp khi bạn hoàn tất. Để thực hiện các thay đổi, bạn phải khởi động lại SSH daemon. Trên Ubuntu/Debian:

sudo service ssh restart

Trên CentOS/Fedora:

sudo service sshd restart

Sau khi daemon khởi động lại, bạn sẽ cần xác thực bằng cách chỉ định số cổng (được minh họa trong một phần trước).

Hạn chế 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ể thực hiện một vài cách tiếp cận khác nhau, mỗi cách đều liên quan đến việc chỉnh sửa tệp cấu hình SSH daemon. Trên máy chủ từ xa của bạn, hãy mở tệp này ngay bây giờ 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 không có, hãy tạo nó ở bất kỳ đâu. Sau chỉ thị, liệt kê các tài khoản người dùng được phép đăng nhập qua SSH:

AllowUsers user1 user2

Lưu và đóng tệp. Khởi động lại daemon để thực hiện các thay đổi của bạn. Trên Ubuntu/Debian:

sudo service ssh restart

Trên CentOS/Fedora:

sudo service sshd restart

Nếu bạn thoải mái hơn với quản lý nhóm, bạn có thể sử dụng chỉ thị AllowGroups thay thế. Nếu 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 ngay lập tức):

AllowGroups sshmembers

Lưu và đóng tệp. Bây giờ, bạn có thể tạo một nhóm hệ thống phù hợp bằng cách nhập:

sudo groupadd -r sshmembers

Bây giờ bạn thêm bất kỳ tài khoản người dùng được sử dụng SSH vào nhóm này bằng cách nhập:

sudo usermod -a -G sshmembers user1
sudo usermod -a -G sshmembers user2

Bây giờ, khởi động lại SSH daemon để thực hiện các thay đổi của bạn. Trên Ubuntu/Debian:

sudo service ssh restart

Trên CentOS/Fedora:

sudo service sshd restart

Vô hiệu hóa đăng nhập Root

Thường thì nên vô hiệu hóa hoàn toàn đă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 SSH daemon 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

Bên trong, tìm một chỉ thị có tên PermitRootLogin. Nếu nó bị nhận xét, hãy bỏ nhận xét. Thay đổi giá trị thành “no”:

PermitRootLogin no

Lưu và đóng tệp. Để thực hiện các thay đổi của bạn, hãy khởi động lại SSH daemon. 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 có thể muốn vô hiệu hóa quyền truy cập root nói chung, nhưng cho phép nó để một số ứng dụng nhất định chạy đúng. Một ví dụ về điều này có thể là một quy trình sao lưu. Điều này có thể được thực hiện thông qua tệp authorized_keys của người dùng root. 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 bạn nên 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 bằng 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 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 của khóa bạn đã tải lên, hãy thêm một mục command= xác định lệnh được sử dụng. Điều này nên bao gồm đường dẫn đầy đủ đến tệp thực thi cộng với bất kỳ đối số nào:

command="/path/to/command arg1 arg2" ssh-rsa ...

Lưu và đóng tệp khi bạn hoàn tất. 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ị thành forced-commands-only. Điều này sẽ chỉ cho phép đăng nhập SSH key sử dụng root khi một lệnh đã được chỉ định cho khóa:

PermitRootLogin forced-commands-only

Lưu và đóng tệp. Khởi động lại SSH daemon để thực hiện các thay đổi của bạn. Trên Ubuntu/Debian:

sudo service ssh restart

Trên CentOS/Fedora:

sudo service sshd restart

Chuyển tiếp hiển Thị Ứng Dụng X ( Ứng dụng đồ họa) trên máy chủ đến Client

SSH daemon có thể được cấu hình để tự động chuyển tiếp hiển thị các ứng dụng X trên máy chủ đến máy client. Để bật chức năng này, hã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ị nhận xét, hãy bỏ nhận xét. Nếu không hãy tạo và đặt giá trị thành “yes”:

X11Forwarding yes

Lưu và đóng tệp. Khởi động lại SSH daemon của bạn để thực hiện các thay đổi này. 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 hiển thị của ứng dụng, bạn phải truyền tùy chọn -X từ client khi kết nối:

ssh -X username@remote_host

Các ứng dụng đồ họa được khởi động 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 khi cần thiết.

Tùy chọn cấu hình phía Client (Client-Side)

Trong phần tiếp theo, chúng ta sẽ tập trung vào một số điều chỉnh mà bạn có thể thực hiện ở phía client của kết nối.

Định nghĩa thông tin kết nối cụ thể cho 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 cho một số hoặc tất cả các máy chủ mà bạn kết nối đến. Chúng có thể được lưu trữ trong tệp ~/.ssh/config, được client SSH của bạn đọc mỗi khi nó được gọi. Tạo hoặc mở tệp này trong trình soạn thảo văn bản của bạn trên máy tính cục bộ:

nano ~/.ssh/config

Bạn có thể định nghĩa các tùy chọn cấu hình riêng lẻ bằng cách bắt đầu mỗi mục với từ khóa Host, theo sau là một bí danh. Sau đó, bạn thụt lề dòng tiếp theo và khai báo bất kỳ chỉ thị nào được liệt kê trong trang hướng dẫn ssh_config.

man ssh_config

Một cấu hình ví dụ sẽ là:

Host testhost
    HostName your_domain
    Port 4444
    User demo

Sau đó, bạn có thể kết nối đến your_domain trên cổng 4444 bằng tên người dùng demo bằng cách đơn giản là nhập:

ssh testhost

Bạn cũng có thể sử dụng ký tự đại diện (wildcards) để khớp với nhiều máy chủ cùng lúc. Hãy nhớ rằng các mục khớp phía sau có thể ghi đè các mục phía trước. Do đó, bạn nên đặt các cấu hình chung nhất lên đầu. Ví dụ, bạn có thể mặc định tất cả kết nối không cho phép X forwarding, nhưng tạo một ngoại lệ cho your_domain bằng cách thêm cấu hình này vào tệp của bạn:

Host *
    ForwardX11 no

Host testhost
    HostName your_domain
    ForwardX11 yes
    Port 4444
    User demo

Lưu và đóng tệp khi bạn hoàn tất.

Cách duy trì kết nối SSH để tránh timeout

Nếu bạn thấy mình bị ngắt kết nối khỏi các phiên SSH trước khi bạn sẵn sàng, có thể kết nối của bạn đang hết thời gian. Bạn có thể cấu hình client của mình để gửi một gói đến máy chủ thường xuyên để tránh tình huống này: Trên máy tính cục bộ của bạn, bạn có thể cấu hình điều này cho mọi kết nối bằng cách chỉnh sửa tệp ~/.ssh/config của bạn. Mở nó ngay bây giờ:

nano ~/.ssh/config

Nếu chưa có, bạn hãy thêm một phần cấu hình ở đầu tệp để khớp với tất cả các máy chủ. Đặt ServerAliveInterval là “120” để gửi một gói tin đến máy chủ mỗi hai phút. Điều này sẽ đủ để thông báo cho máy chủ không đóng kết nối.

Host *
    ServerAliveInterval 120

Lưu và đóng tệp khi bạn hoàn tất.

Vô hiệu hóa kiểm tra máy chủ

Theo mặc định, bất cứ khi nào bạn kết nối đến một máy chủ mới, bạn sẽ thấy fingerprint khóa máy chủ của SSH daemon 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 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ủ bạn đang cố gắng kết nối và phát hiện các trường hợp người dùng độc hại có thể đang cố gắng giả mạo 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 ý: Điều này có thể là một rủi ro bảo mật lớn, vì vậy hãy đảm bảo bạn biết mình đang làm gì nếu bạn thiết lập hệ thống của mình như thế này. Để thực hiện thay đổi, hãy mở tệp ~/.ssh/config trên máy tính cục bộ của bạn:

nano ~/.ssh/config

Nếu chưa có, bạn hãy thêm một phần cấu hình ở đầu tệp để khớp với tất cả các máy chủ. Đặt chỉ thị StrictHostKeyChecking thành no để tự động thêm các máy chủ mới vào tệp known_hosts. Đặt UserKnownHostsFile/dev/null để không hiển thị cảnh báo khi gặp máy chủ mới hoặc có sự thay đổi.

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Bạn có thể bật lại việc kiểm tra này cho từng trường hợp cụ thể bằng cách đảo ngược các tùy chọn đó đối với các máy chủ khác. Mặc định của StrictHostKeyCheckingask.

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host testhost
    HostName your_domain
    StrictHostKeyChecking ask
    UserKnownHostsFile /home/demo/.ssh/known_hosts

Đa Luồng SSH trên một kết nối TCP duy nhất

Có những tình huống mà 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 bạn muốn. Nếu bạn đang tạo nhiều kết nối đến cùng một máy, bạn có thể tận dụng đa luồng (multiplexing). Đa luồng SSH tái sử dụng cùng một kết nối TCP cho nhiều phiên SSH. Điều này loại bỏ một số công việc cần thiết để thiết lập một phiên mới, có thể tăng tốc mọi thứ. Giới hạn số lượng kết nối cũng có thể hữu ích vì những lý do khác. Để thiết lập đa luồng, bạn có thể thiết lập các kết nối thủ công hoặc bạn có thể cấu hình client của mình để tự động sử dụng đa luồng. Chúng tôi sẽ minh họa tùy chọn thứ hai ở đây. Để cấu hình đa luồng, hãy chỉnh sửa tệp cấu hình client SSH của bạn trên máy cục bộ của bạn:

nano ~/.ssh/config

Nếu bạn chưa có phần cấu hình sử dụng ký tự đại diện ở đầu tệp, hãy thêm một dòng Host * ngay bây giờ. Bạn sẽ thiết lập các giá trị ControlMaster, ControlPathControlPersist để cấu hình tính năng multiplexing.

Bạn hãy đặt ControlMaster"auto" để tự động cho phép multiplexing nếu có thể. ControlPath sẽ xác định đường dẫn đến socket điều khiển. Phiên SSH đầu tiên sẽ tạo socket này, và các phiên sau có thể sử dụng lại vì nó được đặt tên theo tên người dùng, máy chủ và cổng.

Khi bạn đặt ControlPersist thành 1, kết nối master ban đầu sẽ được chuyển về chạy nền. Tham số 1 có nghĩa là kết nối TCP sẽ tự động đóng sau một giây kể từ khi phiên SSH cuối cùng kết thúc.

Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

Lưu và đóng tệp khi bạn hoàn tất. Bây giờ, chúng ta cần thực sự tạo thư mục chúng ta đã chỉ định trong đường dẫn điều khiển:

mkdir ~/.ssh/multiplex

Bây giờ, bất kỳ phiên nào được thiết lập với cùng một máy sẽ cố gắng sử dụng socket và kết nối TCP hiện có. Khi phiên cuối cùng thoát, kết nối sẽ bị hủy sau một giây. Nếu vì lý do nào đó bạn cần bỏ qua cấu hình đa luồng tạm thời, bạn có thể làm như vậy bằng cách truyền cờ -S với none:

ssh -S none username@remote_host

Thiết lập SSH Tunnels

Việc chuyển tiếp các lưu lượng khác thông qua một đường hầm SSH an toàn là một cách tuyệt vời để khắc phục các cài đặt tường lửa hạn chế. Đây cũng là một cách tuyệt vời để mã hóa lưu lượng mạng chưa được mã hóa.

Cấu hình đường hầm cục bộ đến một 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 chủ cục bộ đến các cổng trên máy chủ từ xa.

Kết nối cục bộ (local connection) cho phép bạn truy cập một địa chỉ mạng từ máy tính của bạn thông qua máy chủ từ xa. Trước tiên, bạn thiết lập một kết nối SSH đến máy chủ từ xa. Tại đó, máy chủ sẽ tạo một kết nối đến địa chỉ mạng bên ngoài (hoặc nội bộ) do bạn chỉ định, và lưu lượng truy cập đến địa chỉ đó sẽ được chuyển tiếp (tunneled) về máy tính của bạn qua một cổng cụ thể.

Bạn thường sử dụng cách này để vượt qua tường lửa và truy cập vào một môi trường mạng ít bị hạn chế hơn. Một trường hợp phổ biến khác là truy cập giao diện web chỉ cho phép kết nối từ localhosttừ một vị trí ở xa.

Để thiết lập một đường hầm cục bộ đế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 và bạn phải cung cấp ba thông tin bổ sung:

  • Cổng cục bộ nơi bạn muốn truy cập kết nối được chuyển tiếp.
  • Máy chủ mà bạn muốn máy chủ từ xa của bạn kết nối đến.
  • Cổng mà bạn muốn máy chủ từ xa của bạn kết nối.

Bạn truyền các giá trị trên (theo đúng thứ tự và phân tách bằng dấu hai chấm) làm đối số cho cờ -L. Đồng thời, bạn sử dụng thêm cờ -f để SSH chuyển vào chế độ chạy nền trước khi thực thi và cờ -N để không mở shell hay chạy bất kỳ chương trình nào ở phía máy chủ từ xa.

Ví dụ, nếu bạn muốn kết nối đến your_domain trên cổng 80 từ máy chủ từ xa và truy cập kết nối đó từ máy cục bộ qua cổng 8888, bạn có thể gõ lệnh sau:

ssh -f -N -L 8888:your_domain:80 username@remote_host

Bây giờ, nếu bạn trỏ trình duyệt web cục bộ của mình đến 127.0.0.1:8888, bạn sẽ thấy nội dung web ở your_domain trên cổng 80. Một hướng dẫn tổng quát hơn về cú pháp là:

ssh -L your_port:site_or_IP_to_access:site_port username@host

Vì kết nối ở chế độ nền, bạn sẽ phải tìm PID của nó để tắt nó. Bạn có thể làm như vậy bằng cách tìm kiếm cổng bạn đã chuyển tiếp:

ps aux | grep 8888

Output1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -L 8888:your_domain:80 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Sau đó, bạn có thể tắt tiến trình bằng cách nhắm mục tiêu PID, đó là số trong cột thứ hai của dòng khớp với lệnh SSH của bạn:

kill 5965

Một tùy chọn khác là bắt đầu kết nối mà không có cờ -f. Điều này sẽ giữ kết nối ở chế độ foreground, ngăn bạn sử dụng cửa sổ terminal trong suốt thời gian chuyển tiếp. Lợi ích của điều này là bạn có thể dễ dàng tắt đường hầm bằng cách gõ CTRL-C.

Cấu hình đường hầm từ xa đến một máy chủ

Bạn có thể sử dụng kết nối SSH để chuyển tiếp (tunnel) 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.

Với một tunnel từ xa (remote tunnel), bạn thiết lập kết nối đến máy chủ từ xa và chỉ định một cổng từ xa trong quá trình tạo tunnel. Cổng này, trên máy chủ từ xa, sẽ được chuyển tiếp về một cặp địa chỉ host và port mà máy cục bộ của bạn có thể truy cập. Cách này cho phép máy chủ từ xa truy cập đến một host thông qua máy tính cục bộ của bạn.

Bạn có thể áp dụng phương pháp này trong trường hợp cần cấp quyền truy cập đến một mạng nội bộ đang bị chặn kết nối từ bên ngoài. Nếu tường lửa cho phép kết nối đi ra ngoài, bạn có thể thiết lập kết nối từ trong mạng ra máy chủ từ xa, và từ đó chuyển tiếp lưu lượng đến một vị trí trong mạng nội bộ.

Để thiết lập một remote tunnel đến máy chủ từ xa, bạn sử dụng tham số -R khi kết nối và cần cung cấp thêm ba thông tin sau:

  • Cổng nơi máy chủ từ xa có thể truy cập kết nối được chuyển tiếp.
  • Máy chủ mà bạn muốn máy tính cục bộ của bạn kết nối đến.
  • Cổng mà bạn muốn máy tính cục bộ của bạn kết nối.

Bạn truyền ba thông tin trên (theo đúng thứ tự và phân tách bằng dấu hai chấm) làm đối số cho cờ -R. Đồng thời, bạn sử dụng cờ -f để SSH chuyển vào chế độ chạy nền trước khi thực thi, và cờ -N để không mở shell hoặc chạy chương trình nào trên máy chủ từ xa.

Ví dụ, nếu bạn muốn kết nối đến your_domain trên cổng 80 từ máy cục bộ và làm cho kết nối đó khả dụng từ máy chủ từ xa qua cổng 8888, bạn có thể gõ lệnh sau:

ssh -f -N -R 8888:your_domain:80 username@remote_host

Bây giờ, trên máy chủ từ xa, mở một trình duyệt web đến 127.0.0.1:8888 sẽ cho phép bạn xem nội dung ở your_domain trên cổng 80. Một hướng dẫn tổng quát hơn về cú pháp là:

ssh -R remote_port:site_or_IP_to_access:site_port username@host

Vì kết nối ở chế độ nền, bạn sẽ phải tìm PID của nó để tắt nó. Bạn có thể làm như vậy bằng cách tìm kiếm cổng bạn đã chuyển tiếp:

ps aux | grep 8888

Output1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -R 8888:your_domain:80 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Sau đó, bạn có thể tắt tiến trình bằng cách nhắm mục tiêu PID, đó là số trong cột thứ hai của dòng khớp với lệnh SSH của bạn:

kill 5965

Một tùy chọn khác là bắt đầu kết nối mà không có cờ -f. Điều này sẽ giữ kết nối ở chế độ foreground, ngăn bạn sử dụng cửa sổ terminal trong suốt thời gian chuyển tiếp. Lợi ích của điều này là bạn có thể dễ dàng tắt đường hầm bằng cách gõ CTRL-C.

Cấu hình đường hầm động đến một máy chủ từ xa

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 chủ cục bộ đến các cổng trên máy chủ từ xa. Một đường hầm động (dynamic tunnel) tương tự như một đường hầm 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. Một đường hầm động làm điều này bằng cách chỉ định một cổng cục bộ duy nhất. Các ứng dụng muốn tận dụng cổng này để chuyển tiếp phải có khả năng giao tiếp bằng giao thức SOCKS để các gói có thể được chuyển hướng chính xác ở phía bên kia của đường hầm.

Khi bạn gửi lưu lượng đến cổng cục bộ này, hệ thống sẽ chuyển tiếp nó đến máy chủ từ xa. Tại đó, giao thức SOCKS sẽ được xử lý để thiết lập kết nối đến địa chỉ đích mà bạn muốn. Cách cấu hình này cho phép các ứng dụng hỗ trợ SOCKS kết nối đến nhiều địa chỉ khác nhau thông qua máy chủ từ xa, mà không cần tạo nhiều tunnel tĩnh riêng biệt. Để thiết lập kết nối, chúng ta sẽ truyền cờ -D cùng với cổng cục bộ nơi chúng ta muốn truy cập đường hầm. Chúng ta cũng sẽ sử dụng cờ -f, làm cho SSH chuyển sang 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 ở phía từ xa. Ví dụ, để thiết lập một đường hầm trên cổng 7777, bạn có thể nhập:

ssh -f -N -D 7777 username@remote_host

Từ đây, bạn có thể bắt đầu cấu hình ứng dụng hỗ trợ SOCKS (như trình duyệt web) trỏ đến cổng mà bạn đã chọn. Ứng dụng sẽ gửi dữ liệu vào socket gắn với cổng đó.

Cách định tuyến lưu lượng đến cổng SOCKS sẽ khác nhau tùy theo ứng dụng. Ví dụ, với Firefox, bạn vào Preferences > Advanced > Settings > Manual proxy configurations để cấu hình. Với Chrome, bạn có thể khởi chạy trình duyệt kèm theo tham số --proxy-server=. Trong cả hai trường hợp, bạn nên sử dụng địa chỉ localhost và cổng mà bạn đã chuyển tiếp.

Vì kết nối SSH đang chạy ở chế độ nền, bạn cần tìm PID của tiến trình để dừng nó khi không còn sử dụng nữa. Bạn có thể thực hiện việc này bằng cách tìm kiếm theo cổng mà bạn đã cấu hình chuyển tiếp:

ps aux | grep 8888

Output1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -D 7777 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

Sau đó, bạn có thể tắt tiến trình bằng cách nhắm mục tiêu PID, đó là số trong cột thứ hai của dòng khớp với lệnh SSH của bạn:

kill 5965

Một tùy chọn khác là bắt đầu kết nối mà không có cờ -f. Điều này sẽ giữ kết nối ở chế độ foreground, ngăn bạn sử dụng cửa sổ terminal trong suốt thời gian chuyển tiếp. Lợi ích của điều này là bạn có thể dễ dàng tắt đường hầm bằng cách gõ CTRL-C.

Sử dụng mã escape trong SSH để điều khiển kết nối

Ngay cả sau khi thiết lập phiên SSH, vẫn có thể kiểm soát kết nối từ bên trong terminal. Chúng ta có thể làm điều này bằng cách sử dụng các mã thoát SSH (SSH escape codes), cho phép chúng ta tương tác với phần mềm SSH cục bộ của mình từ bên trong một phiên.

Cách buộc ngắt kết nối từ phía máy khách (thoát khỏi phiên SSH bị treo hoặc đơ)

Một trong những tính năng hữu ích nhưng ít người biết đến của OpenSSH là khả năng điều khiển một số hành vi của phiên kết nối ngay từ bên trong phiên đó.

Bạn có thể thực thi các lệnh điều khiển này bằng cách bắt đầu với ký tự điều khiển ~ trong phiên SSH. Các lệnh điều khiển chỉ được nhận dạng nếu chúng là thứ đầu tiên bạn gõ sau một dòng mới, vì vậy bạn hãy nhấn ENTER một hoặc hai lần trước khi nhập lệnh.

Một trong những lệnh điều khiển hữu ích nhất là khả năng ngắt kết nối ngay từ phía máy khách. Thông thường, kết nối SSH sẽ do máy chủ đóng, nhưng điều này có thể gây khó khăn nếu máy chủ gặp sự cố hoặc kết nối bị gián đoạn. Khi đó, bạn có thể chủ động đóng kết nối một cách an toàn từ phía máy khách.

Để thực hiện ngắt kết nối từ phía máy khách, bạn hãy gõ ký tự điều khiển ~ kèm theo dấu chấm (.). Nếu kết nối đang gặp sự cố, bạn có thể đang bị kẹt trong một phiên terminal không phản hồi. Dù không thấy phản hồi, bạn vẫn cứ gõ lệnh để thực hiện ngắt kết nối:

[ENTER]
~.

Kết nối sẽ đóng ngay lập tức, đưa bạn trở lại phiên shell cục bộ của bạn.

Đặt nột phiên SSH vào chế độ nền

Một trong những thao tác mà bạn có thể thực hiện là đưa phiên SSH về chế độ chạy nền. Để làm điều này, bạn cần gõ ký tự điều khiển ~, sau đó nhấn tổ hợp phím thông thường để đưa tiến trình về nền (CTRL-z):

[ENTER]
~[CTRL-z]

Điều này sẽ đặt kết nối vào chế độ nền, đưa bạn trở lại phiên shell cục bộ của bạn. Để trở lại phiên SSH của bạn, bạn có thể sử dụng các cơ chế kiểm soát công việc thông thường. Bạn có thể ngay lập tức kích hoạt lại tác vụ được đưa vào chế độ nền gần đây nhất của mình bằng cách nhập:

fg

Nếu bạn có nhiều tác vụ được đưa vào chế độ nền, bạn có thể xem các công việc có sẵn bằng cách nhập:

jobs

Output[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 ra chế độ foreground bằng cách sử dụng chỉ mục 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 hiện có

Tính năng này cho phép bạn thay đổi cấu hình port forwarding ngay cả khi kết nối SSH đã được thiết lập. Nhờ đó, bạn có thể tạo mới hoặc gỡ bỏ các quy tắc port forwarding một cách linh hoạt, ngay trong phiên kết nối.

Bạn thực hiện các thao tác này thông qua giao diện dòng lệnh của SSH, bằng cách sử dụng ký tự điều khiển ~ kết hợp với phím C trong phiên SSH.

[ENTER]
~C

ssh>

Hệ thống sẽ hiển thị cho bạn một dòng lệnh chuyên biệt của SSH, nơi chỉ hỗ trợ một tập lệnh hạn chế. Để xem các tùy chọn khả dụng, bạn có thể gõ -h tại dấu nhắc này. Nếu không thấy phản hồi gì, bạn hãy tăng mức độ chi tiết của đầu ra bằng cách gõ ~v một vài lần.

[ENTER]
~v
~v
~v
~C
-h

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 triển khai bất kỳ tùy chọn chuyển tiếp nào bằng cách sử dụng các tùy chọn thích hợp. Bạn cũng có thể hủy một đường hầm bằng lệnh “kill” liên quan được chỉ định bằng “K” trước chữ cái loại chuyển tiếp. Ví dụ, để hủy một chuyển tiếp cục bộ (-L), bạn có thể sử dụng lệnh -KL. Bạn sẽ chỉ cần cung cấp cổng cho điều này. Vì vậy, để thiết lập một chuyển tiếp cổng cục bộ, bạn có thể nhập:

[ENTER]
~C
-L 8888:127.0.0.1:80

Cổng 8888 trên máy tính cục bộ của bạn bây giờ sẽ có thể giao tiếp với máy chủ web trên máy chủ bạn đang kết nối đến. Khi bạn hoàn tất, bạn có thể hủy chuyển tiếp đó bằng cách nhập:

[ENTER]
~C
-KL 8888

Kết Luận

Chắc hẳn đến đây, bạn đã có cái nhìn toàn diện hơn về SSH, không chỉ là một lệnh ssh user@host đơn giản. Chúng ta đã cùng nhau tìm hiểu từ những kiến thức cơ bản về cơ chế hoạt động, sự khác biệt giữa xác thực mật khẩu và SSH keys, cho đến các phương pháp tạo và quản lý khóa. Đặc biệt, các kỹ thuật cấu hình cả ở phía server và client đã mở ra nhiều cánh cửa để tùy chỉnh và tăng cường bảo mật cho các kết nối của bạn. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách sử dụng SSH hiệu quả trong công việc hàng ngày!

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất