SSH là giao thức bảo mật được sử dụng làm phương tiện chính để kết nối từ xa tới các máy chủ Linux. Nó cung cấp giao diện dựa trên văn bản bằng cách khởi tạo một shell từ xa. Sau khi kết nối, tất cả các lệnh bạn gõ trên terminal cục bộ sẽ được gửi đến máy chủ từ xa và thực thi ở đó.
Trong hướng dẫn dạng cheat sheet này, chúng ta sẽ trình bày một số cách kết nối với SSH để đạt được mục tiêu của bạn. Hướng dẫn này có thể được sử dụng như một tài liệu tham khảo nhanh khi bạn cần biết cách kết nối hoặc cấu hình máy chủ theo các cách khác nhau.
Triển khai ứng dụng frontend của bạn từ GitHub bằng DataOnline App Platform. Hãy để DataOnline lo việc mở rộng ứng dụng của bạn.
Cách sử dụng hướng dẫn này
- Đọc phần Tổng Quan về SSH trước nếu bạn chưa quen với SSH hoặc mới bắt đầu.
- Sử dụng các phần tiếp theo phù hợp với mục tiêu của bạn. Hầu hết các phần không phụ thuộc lẫn nhau, vì vậy bạn có thể dùng chúng một cách độc lập.
- Sử dụng mục “Contents” ở bên trái (với màn hình rộng) hoặc chức năng tìm kiếm của trình duyệt để định vị phần cần thiết.
- Copy và dán các ví dụ dòng lệnh được đưa ra, thay thế các giá trị được đánh dấu bằng giá trị của riêng bạn.
Tổng quan về SSH
Cách phổ biến nhất để kết nối với một máy chủ Linux từ xa là thông qua SSH. SSH là viết tắt của Secure Shell và cung cấp một cách an toàn để thực thi lệnh, thay đổi cấu hình và quản lý dịch vụ từ xa. Khi bạn kết nối qua SSH, bạn đă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 kết nối qua SSH, bạn sẽ được đưa vào một phiên shell – giao diện dựa trên văn bản cho phép bạn tương tác với máy chủ. Trong suốt phiên SSH, tất cả các lệnh bạn gõ trên terminal cục bộ sẽ được gửi qua một kênh mã hóa và thực thi trên máy chủ.
Kết nối SSH được triển khai theo mô hình client-server. Điều này có nghĩa là để thiết lập kết nối SSH, máy chủ từ xa phải chạy phần mềm 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à khởi tạo môi trường thích hợp nếu người dùng cung cấp thông tin xác thực đúng.
Máy tính của người dùng phải có một SSH client – phần mềm biết cách giao tiếp theo giao thức SSH, cho phép bạn cung cấp thông tin về máy chủ từ xa, tên người dùng cũng như các thông tin xác thực cần thiết. Client cũng có thể chỉ định một số chi tiết về loại kết nối mà bạn 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 cách sử dụng mật khẩu (ít an toàn và không được khuyến nghị) hoặc SSH keys, vốn an toàn hơn nhiều.
- Đăng nhập bằng mật khẩu được mã hóa và dễ hiểu đối với người mới, nhưng các bot tự động và kẻ xâm nhập thường cố gắng đăng nhập nhiều lần bằng mật khẩu, dẫn đến nguy cơ bị tấn công.
- Vì lý do này, chúng tôi khuyến nghị luôn sử dụng 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 cặp khóa mật mã, gồm một public key và một private key. Public key có thể được chia sẻ tự do, trong khi private key phải được bảo vệ cẩn thận và không bao giờ được tiết lộ. Để xác thực bằng SSH keys, người dùng cần có cặp khóa SSH trên máy cục bộ và trên máy chủ từ xa, public key phải được sao chép vào tệp ~/.ssh/authorized_keys
(một danh sách các public key được phép đăng nhập vào tài khoản đó) .
Khi một client kết nối và yêu cầu sử dụng xác thực bằng SSH key, nó thông báo cho máy chủ về ý định này và chỉ định public key nào sẽ được sử dụng. Máy chủ sẽ kiểm tra tệp authorized_keys
để tìm public key, tạo một chuỗi ngẫu nhiên và mã hóa chuỗi đó bằng public key. Thông điệp được mã hóa này chỉ có thể được giải mã bằng private key tương ứng. Máy chủ sau đó gửi thông điệp đã mã hóa cho client để kiểm tra xem client có thực sự sở hữu private key hay không. Khi nhận được thông điệp, client giải mã bằng private key, kết hợp chuỗi ngẫu nhiên với session ID đã đàm phán trước đó, tạo ra một giá trị MD5 và gửi lại máy chủ. Máy chủ so sánh giá trị MD5 này với giá trị mong đợi để xác định rằng client có private key chính xác.
Sinh và sử dụng SSH Keys
Sinh cặp SSH Key
Sinh một cặp public và private key trên máy tính cục bộ 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 đặc biệt, bạn nên luôn xác thực bằng SSH keys.
Có nhiều thuật toán mật mã có thể dùng để sinh SSH keys (RSA, DSA, ECDSA…); RSA thường được ưu tiên và là loại khóa mặc định.
Để sinh cặp khóa RSA trên máy cục bộ, gõ:
ssh-keygen
Khi chạy lệnh, bạn sẽ thấy thông báo:
Generating public/private rsa key pair. Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Nhấn ENTER để chấp nhận vị trí mặc định (thư mục ẩn .ssh
trong thư mục home).
Sau đó, bạn sẽ được yêu cầu nhập passphrase (có thể để trống nếu không muốn):
Enter passphrase (empty for no passphrase): Enter same passphrase again:
Nếu bạn nhập passphrase, không có ký tự nào hiển thị vì lý do bảo mật.
Sau khi hoàn tất, bạn sẽ nhận được thông báo:
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+ | +-----------------+
~/.ssh/id_rsa
: Đây là private key. KHÔNG CHIA SẺ TỆP NÀY!~/.ssh/id_rsa.pub
: Đây là public key, có thể chia sẻ tự do.
Lưu ý: Bạn có thể tham khảo hướng dẫn “Tạo SSH keys với OpenSSH trên macOS hoặc Windows Subsystem” nếu cần thêm.
Sinh SSH Key với số Bit lớn hơn
SSH keys mặc định có 2048 bit, được xem là đủ an toàn. Tuy nhiên, bạn có thể chỉ định số bit lớn hơn (ví dụ 4096 bit) để tăng cường bảo mật:
ssh-keygen -b 4096
Nếu bạn đã tạo trước đó một khóa khác, bạn sẽ được hỏi có muốn ghi đè khóa cũ không:
Overwrite (y/n)?
Nếu chọn “yes”, khóa cũ sẽ bị ghi đè và bạn sẽ không thể đăng nhập với khóa đó nữa. Hãy cẩn thận khi ghi đè.
Xóa hoặc thay đổi Passphrase của Private Key
Nếu bạn đã tạo một passphrase cho private key của mình và muốn thay đổi hoặc loại bỏ nó, bạn có thể làm điều đó một cách dễ dàng.
Lưu ý: Để thay đổi hoặc loại bỏ passphrase, bạn phải biết passphrase ban đầu. Nếu bạn mất passphrase của key, sẽ không có cách khắc phục nào và bạn sẽ phải tạo một cặp key mới.
Để thay đổi hoặc loại bỏ passphrase, chỉ cần gõ:
Hiển thị dấu vân tay (Fingerprint) của SSH Key
Mỗi cặp SSH key có “dấu vân tay” duy nhất. Để xem dấu vân tay, sử dụng:
ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa):
Khi được hỏi vị trí của khóa, nhấn ENTER nếu đúng (ví dụ: /root/.ssh/id_rsa
), bạn sẽ nhận được chuỗi thông tin gồm số bit, dấu vân tay, tài khoản & host và thuật toán sử dụng:
4096 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 lên máy chủ sử dụng ssh-copy-id
Nếu máy chủ cho phép đăng nhập bằng mật khẩu và tiện ích ssh-copy-id
có sẵn, 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 trên máy chủ từ xa. Quá trình sẽ tự động thêm nội dung của tệp ~/.ssh/id_rsa.pub
vào tệp ~/.ssh/authorized_keys
và hiển thị:
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:
Bây giờ, bạn có thể đăng nhập mà không cần mật khẩu.
Sao chép Public Key không dùng SSH-Copy-Id
Nếu không có ssh-copy-id
, bạn có thể dùng lệnh:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Lệnh này sẽ yêu cầu bạn nhập mật khẩu cho tài khoản trên máy chủ từ xa. Sau khi nhập mật khẩu, public key của bạn sẽ được thêm vào cuối tệp 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 to continue connecting (yes/no)? yes demo@111.111.11.111's password:
Sau khi nhập mật khẩu, key 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 Key thủ công
Nếu bạn không có quyền truy cập đăng nhập bằng mật khẩu, hãy mở tệp public key bằng:
cat ~/.ssh/id_rsa.pub
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
Sao chép toàn bộ nội dung được hiển thị và dán vào tệp ~/.ssh/authorized_keys
trên máy chủ từ xa (có thể qua giao diện web console của DataOnline). Trước tiên, tạo thư mục nếu chưa có:
mkdir -p ~/.ssh
Sau đó, thêm nội dung:
echo public_key_string >> ~/.ssh/authorized_keys
Hướng dẫn kết nối cơ bản
Kết nốI đến máy chủ từ xa
Để kết nối và mở một phiên shell, gõ:
ssh remote_host
Nếu tên người dùng khác giữa máy cục bộ và máy chủ, dùng:
ssh username@remote_host
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
Lần đầu kết nối, bạn sẽ thấy thông báo xác thực host. Nhập “yes” để chấp nhận. Nếu đăng nhập bằng mật khẩu, nhập mật khẩu; nếu dùng SSH keys, bạn có thể được yêu cầu nhập passphrase (nếu có).
Chạy một lệnh trên máy chủ từ xa
Để chạy một lệnh duy nhất thay vì mở shell, gõ:
ssh username@remote_host command_to_run
Lệnh sẽ kết nối, xác thực và thực thi lệnh, sau đó đóng kết nối.
Đăng nhập với cổng khác
Mặc định, SSH sử dụng cổng 22. Nếu máy chủ sử dụng cổng khác, chỉ định cổng bằng tham số -p:
ssh -p port_num username@remote_host
Để không phải nhập cổng mỗi lần, bạn có thể chỉnh sửa tệp ~/.ssh/config
:
nano ~/.ssh/config
Sau đó, chỉ cần gõ ssh remote_alias
để kết nối.
Host remote_alias HostName remote_host Port port_num
Thêm SSH Keys vào SSH Agent
Nếu private key của bạn có passphrase, bạn sẽ được yêu cầu nhập mỗi lần kết nối. Để tránh lặp đi lặp lại, hãy khởi chạy SSH agent:
eval $(ssh-agent)
Ví dụ:
Agent pid 10891
Sau đó, thêm private key vào agent:
ssh-add
Enter passphrase for /home/demo/.ssh/id_rsa: Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)
Nhập passphrase khi được yêu cầu. Sau đó, bạn có thể đă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 của bạn để sử dụng trên một máy chủ
Để đăng nhập vào một máy chủ từ máy chủ khác mà không cần mật khẩu, sử dụng tùy chọn -A khi kết nối:
ssh -A username@remote_host
Sau đó, bạn có thể đăng nhập đến bất kỳ máy chủ nào mà SSH key của bạn được ủy quyền, như thể private key của bạn đang ở trên máy chủ đó.
Các tùy chọn cấu hình phía máy chủ
Phần này chứa một số tùy chọn cấu hình phổ biến trên phía máy chủ có thể định hình cách mà máy chủ của bạn phản hồi và các kiểu kết nối nào được phép.
Vô hiệu hóa xác thực bằng mật khẩu
Nếu bạn đã cấu hình, kiểm tra và xác nhận SSH keys hoạt động tốt, thì tốt nhất là nên vô hiệu hóa xác thực bằng mật khẩu. Việc này sẽ ngăn chặn bất kỳ người dùng nào đăng nhập SSH bằng mật khẩu.
Để thực hiện, hãy kết nối đến máy chủ từ xa và mở tệp cấu hình /etc/ssh/sshd_config
với quyền root hoặc sudo:
Trên Ubuntu/Debian:
Thay đổi cổng mà SSH Daemon chạy
Một số quản trị viên gợi ý thay đổi cổng mặc định mà SSH chạy (mặc định là cổng 22). Việc này có thể giúp giảm số lượng nỗ lực xác thực mà máy chủ phải chịu từ các bot tự động.
Để thay đổi cổng mà SSH daemon lắng nghe, bạn cần đăng nhập vào máy chủ từ xa. Mở tệp sshd_config
trên máy chủ với quyền root hoặc sudo:
Trên Ubuntu/Debian:
Giới hạn các tài khoản có thể kết nốI qua SSH
Để giới hạn rõ ràng các tài khoản được phép đăng nhập qua SSH, bạn có thể sử dụng một vài cách, tất cả đều liên quan đến việc chỉnh sửa tệp cấu hình của SSH daemon.
Trên máy chủ từ xa, mở tệp với quyền root hoặc sudo:
Trên Ubuntu/Debian:
Sau đó, tạo một nhóm hệ thống (không có thư mục home) trùng với tên nhóm đã chỉ định:
Trên Ubuntu/Debian:
Thông thường, sau khi bạn đã thiết lập tài khoản người dùng SSH có quyền sudo, nên vô hiệu hóa hoàn toàn đăng nhập root qua SSH.
Để thực hiện, mở tệp cấu hình SSH daemon với quyền root hoặc sudo:
Trên Ubuntu/Debian:
Có một số trường hợp bạn có thể muốn vô hiệu hóa đăng nhập root chung chung, nhưng cho phép root sử dụng cho một số lệnh nhất định (ví dụ như quy trình backup).
Việc này có thể thực hiện thông qua tệp authorized_keys
của root, chứa các SSH key được phép sử dụng tài khoản này.
Thêm SSH key từ máy cục bộ mà bạn muốn dùng cho quy trình này vào tệp authorized_keys
của root trên máy chủ. (Chúng tôi khuyến nghị tạo một key mới cho mỗi quy trình tự động.) Ví dụ, sử dụng lệnh ssh-copy-id
:
Sau đó, đăng nhập vào máy chủ từ xa và mở tệp authorized_keys
của root với quyền root hoặc sudo:
Tiếp theo, mở tệp cấu hình SSH daemon:
Trên Ubuntu/Debian:
SSH daemon có thể được cấu hình để tự động chuyển tiếp hiển thị của các ứng dụng X từ máy chủ đến máy client. Để chức năng này hoạt động đúng, máy client phải có hệ thống X Windows được cấu hình và kích hoạt.
Để kích hoạt, đăng nhập vào máy chủ từ xa và mở tệp sshd_config
với quyền root hoặc sudo:
Trên Ubuntu/Debian:
Các tùy chọn cấu hình phía Client
Trong phần tiếp theo, chúng ta sẽ tập trung vào một số điều chỉnh 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 riêng 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. Các cấu hình này có thể được lưu trong tệp ~/.ssh/config
, tệp này sẽ được SSH client đọ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 trên máy cục bộ của bạn:
Giữ kết nối không bị ngắt (Timeout)
Nếu bạn thấy rằng phiên SSH của mình bị ngắt trước khi bạn muốn, có thể do kết nối bị timeout.
Bạn có thể cấu hình SSH client gửi một gói tin đến máy chủ định kỳ để tránh tình trạng này:
Trên máy cục bộ, 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
. Mở tệp:
Nếu tệp chưa có, hãy định nghĩa một phần áp dụng cho tất cả các host ở đầu tệp và đặt tham số ServerAliveInterval
thành “120” (nghĩa là gửi gói tin mỗi 2 phút). Điều này đủ để thông báo cho máy chủ không đóng kết nối:
Vô hiệu hóa kiểm tra Host Key
Theo mặc định, mỗi khi bạn kết nối tới một máy chủ mới, SSH client sẽ hiển thị dấu vân tay (fingerprint) của SSH daemon từ xa, giúp bạn xác minh tính xác thực của host và nhận diện các trường hợp kẻ xấu có thể cố gắng giả mạo máy chủ.
Ví dụ:
Để thay đổi, mở tệp ~/.ssh/config
trên máy cục bộ:
Ví dụ:
Có những trường hợp thiết lập một kết nối TCP mới mất nhiều thời gian hơn bạn mong muốn. Nếu bạn thường kết nối nhiều lần tới cùng một máy chủ, bạn có thể tận dụng tính năng multiplexing.
SSH multiplexing tái sử dụng cùng một kết nối TCP cho nhiều phiên SSH, giúp giảm bớt công việc thiết lập phiên mới và có thể tăng tốc quá trình kết nối. Giới hạn số lượng kết nối cũng có thể hữu ích cho các lý do khác.
Để thiết lập multiplexing, bạn có thể cấu hình SSH client tự động sử dụng multiplexing khi có thể. Ví dụ, mở tệp cấu hình:
- ControlMaster auto: Tự động cho phép multiplexing.
- ControlPath: Xác định đường dẫn cho socket điều khiển, được đặt theo tên người dùng, host và cổng.
- ControlPersist 1: Cho phép kết nối master chuyển sang background và tự động kết thúc sau 1 giây khi phiên SSH cuối cùng đóng.
Sau khi lưu và đóng tệp, bạn cần tạo thư mục được chỉ định trong ControlPath
:
Nếu bạn cần tạm thời bỏ qua cấu hình multiplexing, hãy dùng tham số -S none
:
ssh -S none username@remote_host
Việc chuyển tiếp lưu lượng khác qua một Tunnels SSH bảo mật là một cách tuyệt vời để vượt qua các thiết lập tường lửa hạn chế. Nó cũng là cách tuyệt vời để mã hóa lưu lượng mạng vốn không được mã hóa.
Cấu hình chuyển tiếp 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.
Một kết nối cục bộ cho phép bạn truy cập đến 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. Đầu tiên, một kết nối SSH được thiết lập đến máy chủ từ xa. Trên máy chủ đó, một kết nối sẽ được thực hiện đế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 đến địa chỉ đó sẽ được chuyển tiếp về máy cục bộ của bạn qua một cổng xác định.
Điều này thường được sử dụng để chuyển tiếp đến một môi trường mạng ít 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 giao diện web “chỉ localhost” từ một vị trí từ xa.
Để thiết lập một Tunnels cục bộ đến máy chủ từ xa, bạn cần sử dụng tham số -L khi kết nối và cung cấp thêm ba thông tin bổ sung:
- Cổng cục bộ nơi bạn muốn truy cập Tunnels.
- 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.
Những tham số này được cung cấp, theo thứ tự trên (các giá trị cách nhau bởi dấu hai chấm), dưới dạng các đối số cho tham số -L. Chúng ta cũng sẽ sử dụng tham số -f để cho phép SSH chạy nền trước khi thực thi, và tham số -N để không mở một shell hay thực thi một chương trình nào trên phía máy chủ từ xa.
Ví dụ, để kết nối đến your_domain
trên cổng 80 của máy chủ từ xa và chuyển tiếp kết nối đó đến cổng 8888 trên máy cục bộ, bạn có thể gõ:
Một hướng dẫn tổng quát hơn về cú pháp là:
Cấu hình chuyển tiếp từ xa đến máy chủ
Các kết nối SSH cũng 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 một Tunnels từ xa, một kết nối được thực hiện đến một máy chủ từ xa. Trong quá trình tạo Tunnels, 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à host mà máy tính cục bộ của bạn kết nối đến. Điều này cho phép máy tính từ xa truy cập đến một host thông qua máy cục bộ của bạn.
Điều này hữu ích nếu bạn cần cho phép truy cập đến một mạng nội bộ mà các kết nối từ bên ngoài bị hạn chế. Nếu tường lửa cho phép các kết nối ra ngoài, bạn có thể kết nối tới một máy chủ từ xa và chuyển tiếp lưu lượng từ máy đó đến một vị trí trên mạng nội bộ.
Để thiết lập một Tunnels từ xa đến máy chủ từ xa, 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 trên máy chủ từ xa nơi lưu lượng sẽ được truy cập.
- Host 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ộ kết nối đến.
Những tham số này được cung cấp, theo thứ tự trên (các giá trị cách nhau bởi dấu hai chấm), dưới dạng các đối số cho tham số -R. Chúng ta cũng sẽ sử dụng tham số -f để chạy SSH ở chế độ nền và tham số -N để không mở shell hay thực thi chương trình nào trên phía máy chủ từ xa.
Ví dụ, để kết nối đến your_domain
trên cổng 80 của máy cục bộ và chuyển tiếp kết nối đó đến cổng 8888 trên máy chủ từ xa, bạn có thể gõ:
Hướng dẫn tổng quát về cú pháp:
Cấu hình chuyển tiếp động (Dynamic Tunneling) đến máy chủ
Các kết nối SSH cũng 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 máy chủ từ xa thông qua một tunnel động.
Một Tunnels động tương tự như Tunnels cục bộ, nhưng nó cho phép máy cục bộ kết nối đến các nguồn khác thông qua máy chủ từ xa chỉ bằng cách 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 phải có khả năng giao tiếp theo giao thức SOCKS để các gói tin được chuyển hướng chính xác ở phía bên kia Tunnels.
Lưu lượng được chuyển đến cổng cục bộ này sẽ được gửi tới máy chủ từ xa. Từ đó, giao thức SOCKS sẽ được giải thích để thiết lập kết nối đến vị trí đích mong muốn. Cách thiết lập này cho phép các ứng dụng hỗ trợ SOCKS kết nối đến nhiều địa chỉ qua máy chủ từ xa mà không cần tạo nhiều Tunnels tĩnh.
Để thiết lập kết nối, chúng ta sẽ sử dụng tham số -D cùng với cổng cục bộ mà bạn muốn sử dụng cho Tunnels. Chúng ta cũng sẽ dùng tham số -f để SSH chạy nền trước khi thực thi và tham số -N để không mở shell hay thực thi chương trình nào trên phía máy chủ từ xa.
Ví dụ, để thiết lập một Tunnels động trên cổng 7777, bạn có thể gõ:
Cách định hướng lưu lượng đến cổng SOCKS sẽ khác nhau tùy theo ứ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 chạy ứng dụng với tham số –proxy-server= được thiết lập, sử dụng giao diện localhost và cổng đã chuyển tiếp.
Vì Tunnels đang chạy nền, bạn sẽ cần tìm PID của tiến trình để dừng nó. Bạn có thể tìm kiếm theo cổng đã chuyển tiếp bằng lệnh:
Sử dụng mã Escape SSH để điều khiển kết nối
Ngay cả sau khi đã thiết lập một phiên SSH, bạn vẫn có thể điều khiển kết nối từ bên trong terminal. Chúng ta có thể làm điều này thông qua cái gọi là mã escape SSH, cho phép bạn tương tác với phần mềm SSH cục bộ ngay trong phiên làm việc.
Ép ngắt kết nối từ phía Client (Cách thoát phiên bị treo hoặc đóng băng)
Một trong những tính năng hữu ích nhất của OpenSSH mà thường không được 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.
Những lệnh này được thực thi bằng cách 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à điều đầu tiên được gõ sau một dòng mới, vì vậy hãy luôn nhấn ENTER một hoặc hai lần trước khi sử dụng.
Một trong những lệnh hữu ích nhất là khả năng khởi tạo việc ngắt kết nối từ phía client. Thông thường, kết nối SSH sẽ bị đóng bởi máy chủ, nhưng điều này có thể trở nên bất tiện nếu máy chủ gặp sự cố hoặc kết nối bị đứt. Bằng cách sử dụng ngắt kết nối phía client, bạn có thể đóng kết nối một cách gọn gàng từ phía client.
Để đóng kết nối từ phía client, sử dụng ký tự điều khiển ~
kèm theo dấu chấm. Nếu kết nối của bạn gặp sự cố, có thể bạn sẽ rơi vào một phiên terminal dường như bị treo. Hãy gõ lệnh ngay cả khi không có phản hồi để thực hiện việc ngắt kết nối phía client:
Đưa phiên SSH vào Background
Một trong những tính năng hữu ích khác của OpenSSH là khả năng điều khiển một số khía cạnh của phiên kết nối từ bên trong.
Những lệnh này cũng được thực thi bắt đầu với ký tự điều khiển ~
trong phiên SSH. Chúng chỉ được hiểu nếu là điều đầu tiên được gõ sau một dòng mới, vì vậy luôn 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 mang lại là đưa phiên SSH vào background. Để thực hiện điều này, bạn cần nhập ký tự điều khiển ~
sau đó thực hiện phím tắt truyền thống để đưa tác vụ sang background (CTRL-z):
Bạn có thể kích hoạt lại ngay tác vụ background gần nhất bằng lệnh:
Một trong những tính năng hữu ích khác của OpenSSH là khả năng điều chỉnh các thiết lập chuyển tiếp port ngay trong phiên SSH.
Những lệnh này cũng được thực hiện bằng cách bắt đầu với ký tự điều khiển ~
trong phiên SSH. Chúng chỉ được hiểu nếu là điều đầu tiên được gõ sau một dòng mới, vì vậy hãy nhấn ENTER một hoặc hai lần trước khi sử dụng.
Một điều mà tính năng này cho phép là người dùng có thể thay đổi cấu hình chuyển tiếp port 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 port “on-the-fly”.
Các khả 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à phím “C”:
Ví dụ, để thiết lập một chuyển tiếp cổng cục bộ, bạn có thể gõ:
Những hướng dẫn trên nên bao gồm phần lớn các thông tin mà hầu hết người dùng cần về SSH trong công việc hàng ngày. Nếu bạn có mẹo khác hoặc muốn chia sẻ các cấu hình, phương pháp yêu thích của mình, hãy thoải mái để lại bình luận bên dưới nhé