Thứ năm, 17/09/2020 | 00:00 GMT+7

Những điều cần biết về SSH: Làm việc với server, client và Khóa SSH

SSH là một giao thức an toàn được sử dụng làm phương tiện chính để kết nối với các server Linux từ xa. Nó cung cấp một giao diện dựa trên văn bản bằng cách tạo ra một shell từ xa. Sau khi kết nối, tất cả các lệnh bạn nhập vào terminal local sẽ được gửi đến server từ xa và được thực thi ở đó.

Trong hướng dẫn kiểu ghi chú này, ta sẽ trình bày một số cách kết nối phổ biến với SSH để đạt được mục tiêu của bạn. Đây được 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 server của bạn theo các cách khác nhau.

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 không quen với SSH nói chung hoặc mới bắt đầu.
  • Sử dụng bất kỳ phần nào tiếp theo có thể áp dụng cho những gì bạn đang cố gắng đạt được. Hầu hết các phần không được dự đoán trên bất kỳ phần nào khác, vì vậy bạn có thể sử dụng các ví dụ sau một cách độc lập.
  • Sử dụng menu Nội dung ở phía bên trái của trang này (ở độ rộng trang rộng) hoặc chức năng tìm kiếm của trình duyệt của bạn để tìm các phần bạn cần.
  • Copy paste các ví dụ dòng lệnh đã cho, thay thế các giá trị được highlighted bằng các giá trị của bạn .

Tổng quan về SSH

Cách phổ biến nhất để kết nối với server 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 và bảo mật để thực hiện các lệnh, áp dụng các thay đổi và cấu hình dịch vụ từ xa. Khi bạn kết nối qua SSH, bạn đăng nhập bằng account tồn tại trên server từ xa.

Cách hoạt động của SSH

Khi bạn kết nối thông qua SSH, bạn sẽ được đưa vào một phiên shell, đây là một giao diện dựa trên văn bản, nơi bạn có thể tương tác với server của bạn . 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 local đều được gửi qua một tunnel SSH được mã hóa và được thực thi trên server của bạn.

Kết nối SSH được triển khai bằng mô hình client - server . Điều này nghĩa là để cài đặt kết nối SSH, máy tính từ xa phải chạy một phần mềm được gọi là daemon SSH. 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 user cung cấp thông tin xác thực chính xác.

Máy tính của user phải có một client SSH. Đâ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ề server lưu trữ từ xa để kết nối, tên user để sử dụng và thông tin đăng nhập cần được chuyển để xác thực. Máy khách cũng có thể chỉ định một số chi tiết nhất định về kiểu kết nối mà họ muốn cài đặt .

Cách SSH xác thực user

Khách hàng thường xác thực bằng password (kém an toàn hơn và không được khuyến khích ) hoặc SSH key , rất an toàn.

Mật khẩu đăng nhập được mã hóa và dễ hiểu cho user mới. Tuy nhiên, các bot tự động và user độc hại thường sẽ cố gắng xác thực nhiều lần các account cho phép đăng nhập dựa trên password , điều này có thể dẫn đến các thỏa hiệp bảo mật. Vì lý do này, ta khuyên bạn nên luôn cài đặt xác thực dựa trên SSH key cho hầu hết các cấu hình.

Khóa SSH là một tập hợp các khóa mật mã phù hợp được dùng để xác thực. Mỗi containers một public key và private key . Khóa công khai có thể được chia sẻ tự do mà không cần quan tâm, trong khi private key 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 key , user phải có cặp SSH key trên máy tính local của họ. Trên server từ xa, public key phải được sao chép vào file trong folder chính của user tại ~/.ssh/authorized_keys . Tệp này chứa danh sách các public key , một khóa trên mỗi dòng, được phép đăng nhập vào account này.

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

Khi nhận được thông báo này, khách hàng sẽ giải mã nó bằng cách sử dụng private key và kết hợp chuỗi ngẫu nhiên được tiết lộ với ID phiên đã thương lượng trước đó. Sau đó, nó tạo ra một băm MD5 của giá trị này và truyền nó trở lại server . Server đã có thông báo root và ID phiên, vì vậy nó có thể so sánh băm MD5 được tạo bởi các giá trị đó và xác định rằng client phải có private key .

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

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

Phần này sẽ trình bày cách tạo SSH key trên client và phân phối public key cho các server nơi chúng sẽ đượ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 đó do tính bảo mật được tăng cường cho phép các kết nối trong tương lai.

Tạo cặp SSH key

Tạo cặp khóa public key và private key SSH mới trên máy tính local của bạn là bước đầu tiên để xác thực bằng server từ xa mà không cần password . Trừ khi có lý do chính đáng để không làm như vậy, bạn phải luôn xác thực bằng SSH key .

Một số thuật toán mật mã được dùng để tạo SSH key , bao gồm RSA, DSA và ECDSA. Các 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 local 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): 

Dấu nhắc này cho phép bạn chọn vị trí để lưu trữ private key RSA của bạn . Nhấn ENTER để để cài đặt này làm mặc định, sẽ lưu trữ chúng trong .ssh ẩn .ssh trong .ssh của user của bạn. Để vị trí mặc định được chọn sẽ cho phép ứng dụng 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: 

Dấu nhắc tiếp theo cho phép bạn nhập passphrase (password bảo vệ) có độ dài tùy ý để bảo mật private key của bạn. Theo mặc định, bạn sẽ phải nhập bất kỳ passphrase (password bảo vệ) nào bạn đặt ở đây mỗi khi bạn sử dụng private key , như một biện pháp bảo mật bổ sung. Vui lòng nhấn ENTER để trống nếu bạn không muốn có passphrase (password bảo vệ) . Hãy ghi nhớ rằng điều này sẽ cho phép bất kỳ ai giành được quyền kiểm soát private key của bạn đăng nhập vào server của bạn.

Nếu bạn chọn nhập passphrase (password bảo vệ) , sẽ không có gì được hiển thị khi bạn nhập. Đây là một biện pháp phòng ngừa an ninh.

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

Quy trình này đã tạo một cặp khóa RSA SSH, nằm trong .ssh ẩn .ssh trong .ssh của user của bạn. Các file này là:

  • ~/.ssh/id_rsa : Khóa riêng tư. KHÔNG CHIA SẺ TẬP TIN NÀY!
  • ~/.ssh/id_rsa.pub : Khóa công khai được liên kết. Điều này có thể được chia sẻ tự do mà không có hậu quả.

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

Các SSH key là 2048 bit theo mặc định. Điều này thường được coi là đủ tốt để bảo mật, nhưng bạn có thể chỉ định số lượng bit lớn hơn cho một khóa cứng hơn.

Để thực hiện việc này, hãy bao gồm đối số -b với số bit bạn muốn. Hầu hết các server hỗ trợ khóa có độ dài ít nhất 4096 bit. Các 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 trước đó bạn đã tạo một khóa khác, bạn sẽ được hỏi có muốn overrides khóa trước đó của bạn không:

Overwrite (y/n)? 

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

Xóa hoặc thay đổi passphrase (password bảo vệ) trên private key

Nếu bạn đã tạo passphrase (password bảo vệ) cho private key của bạn và muốn thay đổi hoặc xóa nó, bạn có thể thực hiện dễ dàng.

Lưu ý : Để thay đổi hoặc xóa passphrase (password bảo vệ) , bạn phải biết passphrase (password bảo vệ) ban đầu. Nếu bạn đã mất passphrase (password bảo vệ) cho khóa, thì không có quyền truy đòi và bạn sẽ phải tạo một cặp khóa mới.

Để thay đổi hoặc xóa passphrase (password bảo vệ) , 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 phím 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 (password bảo vệ) cũ mà bạn muốn thay đổi. Sau đó, bạn sẽ được yêu cầu nhập passphrase (password bảo vệ) mới:

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

Tại đây, hãy nhập passphrase (password bảo vệ) mới của bạn hoặc nhấn ENTER để xóa passphrase (password bảo vệ) .

Hiển thị fingerprint SSH key

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

Để tìm ra dấu fingerprint của 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 phím, nếu không, hãy nhập vị trí đã sửa đổi. Bạn sẽ được cung cấp một chuỗi chứa độ dài bit của khóa, file tham chiếu, account và server lưu trữ mà nó được tạo và thuật toán được sử dụng:

Output
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 SSH Công khai của bạn vào Server có SSH-Copy-ID

Để sao chép public key của bạn vào server , cho phép bạn xác thực mà không cần password , có thể thực hiện một số cách tiếp cận.

Nếu bạn hiện có quyền truy cập SSH dựa trên password được cấu hình cho server của bạn và bạn đã cài đặt tiện ích ssh-copy-id , thì đây là một quá trình đơn giản. Công cụ ssh-copy-id có trong nhiều gói OpenSSH của bản phân phối Linux, vì vậy rất có thể nó có thể được cài đặt theo mặc định.

Nếu bạn có tùy chọn này, bạn có thể dễ dàng chuyển public key của bạn bằng lệnh :

  • ssh-copy-id username@remote_host

Thao tác này sẽ nhắc bạn nhập password của account user 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 gõ vào password , nội dung của bạn ~/.ssh/id_rsa.pub chính sẽ được gắn vào phần cuối của account user của ~/.ssh/authorized_keys file:

Output
Number 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.

Đến đây bạn có thể đăng nhập vào account đó mà không cần password :

  • ssh username@remote_host

Sao chép SSH key công khai của bạn vào một server mà không có SSH-Copy-ID

Nếu bạn không có sẵn tiện ích ssh-copy-id , nhưng vẫn có quyền truy cập SSH dựa trên password vào server từ xa, bạn có thể sao chép nội dung của public key của bạn 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 ssh . Về phía điều khiển từ xa, bạn có thể đảm bảo ~/.ssh tồn tại, sau đó nối nội dung đường ống vào file ~/.ssh/authorized_keys :

  • cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Bạn cần cung cấp password cho account 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 password , khóa của bạn sẽ được sao chép, cho phép bạn đăng nhập mà không cần password :

  • ssh username@remote_IP_host

Sao chép SSH key công khai của bạn vào server theo cách thủ công

Nếu bạn không có sẵn quyền truy cập SSH dựa trên password , bạn sẽ phải thêm public key của bạn vào server từ xa theo cách thủ công.

Trên máy local , bạn có thể tìm thấy nội dung của file public key của bạn bằng lệnh :

  • cat ~/.ssh/id_rsa.pub
Output
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 thủ công vào vị trí thích hợp trên server từ xa. Bạn sẽ phải đăng nhập vào server từ xa thông qua các phương tiện khác (như console web DigitalOcean).

Trên server từ xa, hãy tạo ~/.ssh nếu nó chưa tồn tại:

  • mkdir -p ~/.ssh

Sau đó, bạn có thể tạo hoặc nối thêm file ~/.ssh/authorized_keys bằng lệnh :

  • echo public_key_string >> ~/.ssh/authorized_keys

Đến đây bạn có thể đăng nhập vào server từ xa mà không cần password .

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

Phần sau sẽ trình bày một số điều cơ bản về cách kết nối với server bằng SSH.

Kết nối với server từ xa

Để kết nối với một server từ xa và mở một phiên shell ở đó, bạn có thể sử dụng lệnh ssh .

Biểu mẫu đơn giản nhất giả định tên user của bạn trên máy local giống với tên user trên server từ xa. Nếu điều này là đúng, bạn có thể kết nối bằng cách sử dụng:

  • ssh remote_host

Nếu tên user của bạn khác trên server Remter, bạn cần chuyển tên user từ xa như sau:

  • ssh username@remote_host

Lần đầu tiên kết nối với một server 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 to continue connecting (yes/no)? yes 

Nhập yes để chấp nhận tính xác thực của server từ xa.

Nếu bạn đang sử dụng xác thực password , bạn sẽ được yêu cầu nhập password cho account từ xa tại đây. Nếu bạn đang sử dụng SSH key , bạn sẽ được yêu cầu nhập passphrase (password bảo vệ) của private key nếu password được đặt, nếu không, bạn sẽ được đăng nhập tự động.

Chạy một lệnh trên server từ xa

Để chạy một lệnh duy nhất trên server từ xa thay vì tạo 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

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

Đăng nhập vào server bằng cổng khác

Theo mặc định, daemon SSH trên server chạy trên cổng 22 . Máy khách SSH của bạn sẽ cho rằng đây là trường hợp khi cố gắng kết nối. Nếu server SSH của bạn đang nghe trên một cổng không chuẩn (điều này được trình bày trong phần sau), bạn sẽ phải chỉ định số cổng mới khi kết nối với client của bạn .

Bạn có thể thực hiện việc 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 thực hiện việc này mỗi khi đăng nhập vào server từ xa, bạn có thể tạo hoặc chỉnh sửa file cấu hình trong ~/.ssh trong folder chính của máy tính local .

Chỉnh sửa hoặc tạo file ngay bây giờ bằng lệnh :

  • 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 server . Để chỉ định cổng mới của bạn, hãy 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 chỉ định số cổng cụ thể trên dòng lệnh.

Thêm SSH key của bạn vào SSH Agent để tránh nhập passphrase (password bảo vệ)

Nếu bạn có passphrase (password bảo vệ) trên SSH key riêng tư của bạn , bạn sẽ được yêu cầu nhập passphrase (password bảo vệ) mỗi khi sử dụng để kết nối với server từ xa.

Để tránh phải làm điều này nhiều lần, bạn có thể chạy một đại lý SSH. Tiện ích nhỏ này lưu trữ private key của bạn sau khi bạn nhập passphrase (password bảo vệ) lần đầu tiên. Nó sẽ khả dụng 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 (password bảo vệ) .

Đ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 bạn (sẽ hiển thị ở phần sau).

Để bắt đầu SSH Agent, hãy nhập thông tin sau vào phiên terminal local của bạn:

  • eval $(ssh-agent)
Output
Agent pid 10891

Thao tác này sẽ khởi động chương trình tác nhân và đặt nó vào nền. Bây giờ, bạn cần thêm private key của bạn vào tác nhân để 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 (password bảo vệ) của bạn (nếu password được đặt). Sau đó, file danh tính được thêm vào tác nhân, cho phép bạn sử dụng khóa của bạn để đăng nhập mà không cần phải nhập lại passphrase (password bảo vệ) lần nữa.

Chuyển tiếp thông tin đăng nhập SSH của bạn để sử dụng trên server

Nếu bạn muốn có thể kết nối mà không cần password với một server từ bên trong một server khác, bạn cần phải chuyển tiếp thông tin SSH key của bạn . Điều này sẽ cho phép bạn xác thực với một server khác thông qua server mà bạn được kết nối, sử dụng thông tin đăng nhập trên máy tính local của bạn.

Để bắt đầu, bạn phải khởi động đại lý SSH và SSH key của bạn được thêm vào đại lý (xem phần trước). Sau khi hoàn tất, bạn cần kết nối với server đầu tiên của bạn bằ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 server cho phiên này:

  • ssh -A username@remote_host

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

Tùy chọn cấu hình phía server

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

Tắt xác thực password

Nếu bạn đã cấu hình , kiểm tra và kiểm tra các SSH key và hoạt động bình thường, bạn nên tắt xác thực password . Điều này sẽ ngăn mọi user đăng nhập bằng SSH bằng password .

Để thực hiện việc này, hãy kết nối với server từ xa của bạn và mở file /etc/ssh/sshd_config với quyền root hoặc sudo:

  • sudo nano /etc/ssh/sshd_config

Bên trong file , tìm kiếm lệnh PasswordAuthentication . Nếu nó được comment ra ngoài, hãy bỏ ghi chú nó. Đặt thành no để tắt đăng nhập password :

/ etc / ssh / sshd_config
PasswordAuthentication no 

Sau khi bạn đã thực hiện thay đổi, hãy lưu file . Để áp dụng 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 account trên hệ thống sẽ không thể đăng nhập bằng SSH bằng password .

Thay đổi cổng mà SSH Daemon chạy trên

Một số administrator khuyên 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ần thử xác thực mà server của bạn phải chịu từ các bot tự động.

Để thay đổi cổng mà daemon SSH nghe trên đó, bạn sẽ phải đăng nhập vào server từ xa của bạn . Mở file sshd_config trên hệ thống từ xa với quyền root, bằng cách đăng nhập với user đó hoặc bằng cách sử dụng sudo :

  • sudo nano /etc/ssh/sshd_config

Khi bạn đã ở bên trong, bạn có thể thay đổi cổng mà SSH chạy bằng cách tìm thông số kỹ thuật của 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 nhập mã này vào file của bạn:

/ etc / ssh / sshd_config
#Port 22 Port 4444 

Lưu file khi bạn hoàn tất. Để áp dụng các 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 khởi động lại, bạn cần phải xác thực bằng cách chỉ định số cổng (đã trình bày trong phần trước).

Giới hạn user có thể kết nối thông qua SSH

Để giới hạn rõ ràng các account user có thể đăng nhập thông qua SSH, bạn có thể thực hiện một số cách tiếp cận khác nhau, mỗi cách đều liên quan đến việc chỉnh sửa file cấu hình daemon SSH.

Trên server từ xa của bạn, hãy mở file 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 account được phép đăng nhập là sử dụng lệnh AllowUsers . Tìm kiếm lệnh AllowUsers trong file . Nếu một cái không tồn tại, hãy tạo nó ở bất cứ đâu. Sau lệnh, hãy liệt kê các account user được phép đăng nhập thông qua SSH:

/ etc / ssh / sshd_config
AllowUsers user1 user2 

Lưu và đóng file . Khởi động lại daemon để thực hiện các thay đổi .

Trên Ubuntu / Debian:

  • sudo service ssh restart

Trên CentOS / Fedora:

  • sudo service sshd restart

Nếu bạn thấy phù hợp hơn với việc quản lý group , bạn có thể sử dụng lệnh AllowGroups thay thế. Nếu đúng như vậy, chỉ cần thêm một group duy nhất sẽ được phép truy cập SSH ( ta sẽ tạo group này và thêm thành viên trong giây lát):

/ etc / ssh / sshd_config
AllowGroups sshmembers 

Lưu và đóng file .

Bây giờ, bạn có thể tạo một group hệ thống (không có folder chính) trùng với group bạn đã chỉ định bằng lệnh :

  • sudo groupadd -r sshmembers

Đảm bảo rằng bạn thêm bất kỳ account user nào bạn cần vào group này. Điều này có thể được thực hiện 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 để thực hiện các thay đổi .

Trên Ubuntu / Debian:

  • sudo service ssh restart

Trên CentOS / Fedora:

  • sudo service sshd restart

Tắt đăng nhập root

Bạn thường nên tắt hoàn toàn đăng nhập root thông qua SSH sau khi bạn đã cài đặt account user SSH có quyền sudo .

Để thực hiện việc này, hãy mở file cấu hình daemon SSH bằng root hoặc sudo trên server từ xa của bạn.

  • sudo nano /etc/ssh/sshd_config

Bên trong, hãy tìm kiếm một chỉ thị có tên là PermitRootLogin . Nếu nó được comment , hãy bỏ ghi chú nó. Thay đổi giá trị thành “no” :

/ etc / ssh / sshd_config
PermitRootLogin no 

Lưu và đóng file . Để thực hiện các thay đổi , hãy 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 quyền truy cập root đối với các lệnh cụ thể

Có một số trường hợp bạn có thể cần vô hiệu hóa quyền truy cập root nói chung, nhưng hãy bật nó để cho phép một số ứng dụng chạy chính xác. Một ví dụ về điều này có thể là một thói quen backup .

Điều này có thể được thực hiện thông qua file authorized_keys của user root , file này chứa các SSH key được phép sử dụng account .

Thêm khóa từ máy tính local của bạn mà bạn muốn sử dụng cho quá trình này ( ta khuyên bạn nên tạo khóa mới cho mỗi quy trình tự động) vào file authorized_keys của user root trên server . Ta sẽ chứng minh 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 mà 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 server từ xa. Ta cần điều chỉnh mục nhập trong file authorized_keys quyền_key, vì vậy hãy mở mục nhập đó bằng quyền truy cập root hoặc sudo:

  • sudo nano /root/.ssh/authorized_keys

Ở đầu dòng có khóa bạn đã tải lên, hãy thêm command= list xác định lệnh mà khóa này hợp lệ. Điều này phải bao gồm đường dẫn đầy đủ đến file thực thi, cùng với bất kỳ đối số nào:

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

Lưu file khi bạn hoàn tất.

Bây giờ, hãy mở file 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:

/ etc / ssh / sshd_config
PermitRootLogin forced-commands-only 

Lưu và đóng file . Khởi động lại daemon SSH để thực hiện các thay đổi .

Trên Ubuntu / Debian:

  • sudo service ssh restart

Trên CentOS / Fedora:

  • sudo service sshd restart

Chuyển tiếp Ứng dụng X Hiển thị cho Khách hàng

Daemon SSH có thể được cấu hình để tự động chuyển tiếp hiển thị ứng dụng X trên server đến client . Để điều này hoạt động chính xác, client phải có hệ thống cửa sổ X được cấu hình và kích hoạt.

Để bật chức năng này, hãy đăng nhập vào server từ xa của bạn và chỉnh sửa file sshd_config dưới dạng root hoặc với các quyền sudo:

  • sudo nano /etc/ssh/sshd_config

Tìm kiếm lệnh X11Forwarding . Nếu nó được comment ra ngoài, hãy bỏ ghi chú nó. Tạo nó nếu cần và đặt giá trị thành “yes”:

/ etc / ssh / sshd_config
X11Forwarding yes 

Lưu và đóng file . Khởi động lại daemon SSH của bạn để thực hiện những thay đổi này.

Trên Ubuntu / Debian:

  • sudo service ssh restart

Trên CentOS / Fedora:

  • sudo service sshd restart

Để kết nối với server và chuyển tiếp màn hình của ứng dụng, bạn phải chuyể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 server thông qua phiên này sẽ được hiển thị trên máy tính local . Hiệu suất có thể hơi chậm, nhưng nó rất hữu ích.

Tùy chọn cấu hình phía client

Trong phần tiếp theo, 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.

Xác định thông tin kết nối dành riêng cho server

Trên máy tính local của bạn , bạn có thể xác định các cấu hình riêng lẻ cho một số hoặc tất cả các server mà bạn kết nối. Chúng có thể được lưu trữ trong file ~/.ssh/config , file này được client SSH của bạn đọc mỗi khi nó được gọi.

Tạo hoặc mở file này trong editor trên máy tính local của bạn:

  • nano ~/.ssh/config

Bên trong, bạn có thể xác định các tùy chọn cấu hình riêng lẻ bằng cách giới thiệu từng tùy chọn với từ khóa Host , sau đó là alias . Bên dưới và thụt lề, bạn có thể xác định bất kỳ lệnh nào được tìm thấy trong trang user ssh_config :

  • man ssh_config

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

~ / .ssh / config
Host testhost     HostName your_domain     Port 4444     User demo 

Sau đó bạn có thể kết nối với your_domain trên cổng 4444 sử dụng tên user demo bằng cách đơn giản gõ:

  • ssh testhost

Bạn cũng có thể sử dụng các ký tự đại diện để trùng với nhiều server . Lưu ý các trận đấu muộn hơn có thể overrides các trận đấu trước đó. Do đó, bạn nên đặt các trận đấu chung nhất của bạn lên đầu. Ví dụ: bạn có thể đặt mặc định tất cả các kết nối để không cho phép chuyển tiếp X, với overrides cho your_domain bằng cách có điều này trong file của bạn:

~ / .ssh / config
Host *     ForwardX11 no  Host testhost     HostName your_domain     ForwardX11 yes     Port 4444     User demo 

Lưu file khi bạn hoàn tất.

Giữ kết nối tồn tại để tránh thời gian chờ

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 đã hết thời gian chờ.

Bạn có thể cấu hình client của bạn để gửi một gói đến server thường xuyên để tránh tình huống này:

Trên máy tính local , 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 file ~/.ssh/config . Mở nó bây giờ:

  • nano ~/.ssh/config

Nếu chưa tồn tại, ở đầu file , hãy xác định một phần sẽ trùng với tất cả các server . Đặt ServerAliveInterval thành “120” để gửi một gói đến server hai phút một lần. Điều này đủ để thông báo cho server không đóng kết nối:

~ / .ssh / config
Host *     ServerAliveInterval 120 

Lưu file khi bạn hoàn tất.

Tắt kiểm tra server

Theo mặc định, khi nào bạn kết nối với một server mới, bạn sẽ được hiển thị dấu fingerprint khóa server 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 server lưu trữ mà bạn đang cố kết nối và phát hiện các trường hợp mà user độc hại có thể đang cố gắng giả dạng server lưu trữ từ xa.

Trong một số trường hợp nhất định, bạn có thể cần tắt tính năng này. Lưu ý : Đâ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 cài đặt hệ thống của bạn như vậy.

Để thực hiện thay đổi, hãy mở file ~/.ssh/config trên máy tính local của bạn:

  • nano ~/.ssh/config

Nếu chưa tồn tại, ở đầu file , hãy xác định một phần sẽ trùng với tất cả các server . Đặt chỉ thị Kiểm tra nghiêm StrictHostKeyChecking thành no để tự động thêm server mới vào file known_hosts . Đặt UserKnownHostsFile thành /dev/null để không cảnh báo về các server mới hoặc đã thay đổi:

~ / .ssh / config
Host *     StrictHostKeyChecking no     UserKnownHostsFile /dev/null 

Bạn có thể bật kiểm tra tùy từng trường hợp bằng cách đảo ngược các tùy chọn đó cho các server khác. Mặc định cho Kiểm tra nghiêm StrictHostKeyCheckingask :

~ / .ssh / config
Host *     StrictHostKeyChecking no     UserKnownHostsFile /dev/null  Host testhost     HostName your_domain     StrictHostKeyChecking ask     UserKnownHostsFile /home/demo/.ssh/known_hosts 

Ghép kênh SSH qua một kết nối TCP đơn

Có những tình huống mà việc cài đặt 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 thực hiện nhiều kết nối với cùng một máy, bạn có thể tận dụng lợi thế của việc ghép kênh.

Ghép kênh SSH sử dụng lại 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 để cài đặt một phiên mới, có thể đẩy nhanh tiến độ. 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.

Để cài đặt ghép kênh, bạn có thể cài đặt thủ công các kết nối hoặc bạn có thể cấu hình ứng dụng client của bạn để tự động sử dụng ghép kênh khi có sẵn. Ta sẽ chứng minh tùy chọn thứ hai ở đây.

Để cấu hình ghép kênh, hãy chỉnh sửa file cấu hình client SSH trên máy local của bạn:

  • nano ~/.ssh/config

Nếu bạn chưa có định nghĩa server ký tự đại diện ở đầu file , hãy thêm một định nghĩa ngay bây giờ (dưới dạng Host * ). Ta sẽ cài đặt các giá trị ControlMaster , ControlPathControlPersist để cài đặt cấu hình ghép kênh của ta .

ControlMaster nên được đặt thành “tự động” để có thể tự động cho phép ghép kênh nếu có thể. ControlPath sẽ cài đặt đường dẫn đến socket điều khiển. Phiên đầu tiên sẽ tạo socket này và các phiên tiếp theo sẽ có thể tìm thấy nó vì nó được gắn nhãn bởi tên user , server và cổng.

Đặt tùy chọn ControlPersist thành 1 sẽ cho phép kết nối chính ban đầu được chạy nền. Kết quả 1 chỉ định rằng kết nối TCP sẽ tự động kết thúc một giây sau khi phiên SSH cuối cùng bị đóng:

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

Lưu file khi bạn hoàn tất. Bây giờ, ta cần tạo folder mà 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 cài đặt với cùng một máy sẽ cố gắng sử dụng kết nối TCP và socket hiện có. Khi phiên cuối cùng tồn tại, kết nối sẽ bị ngắt sau một giây.

Nếu vì lý do nào đó bạn cần tạm thời bỏ qua cấu hình ghép kênh, bạn có thể thực hiện bằng cách chuyển cờ -Snone :

  • ssh -S none username@remote_host

Cài đặt tunnel SSH

Tạo tunnel cho lưu lượng truy cập khác thông qua tunnel SSH an toàn là một cách tốt để giải quyết các cài đặt firewall hạn chế. Nó cũng là một cách tốt để mã hóa lưu lượng mạng không được mã hóa.

Cấu hình tunnel local tới server

Kết nối SSH được dùng để tạo tunnel lưu lượng truy cập từ các cổng trên server local đến các cổng trên server từ xa.

Kết nối local là một cách truy cập vị trí mạng từ máy tính local của bạn thông qua server từ xa của bạn. Đầu tiên, kết nối SSH được cài đặt với server từ xa của bạn. Trên server từ xa, một kết nối được thực hiện với một địa chỉ mạng bên ngoài (hoặc nội bộ) do user cung cấp và lưu lượng truy cập đến vị trí này được truyền tới máy tính local của bạn trên một cổng được chỉ định.

Điều này thường được sử dụng để chuyển sang một môi trường mạng ít bị hạn chế hơn bằng cách vượt qua firewall . Một cách sử dụng phổ biến khác là truy cập giao diện web “chỉ dành cho server local ” từ xa .

Để cài đặt một tunnel local đến server 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 phần thông tin bổ sung:

  • Cổng local nơi bạn muốn truy cập kết nối tunnel .
  • Server lưu trữ mà bạn muốn server lưu trữ từ xa của bạn kết nối.
  • Cổng mà bạn muốn server từ xa của bạn kết nối.

Chúng được đưa ra, theo thứ tự ở trên (phân tách bằng dấu hai chấm), làm đối số cho cờ -L . Ta cũng sẽ sử dụng cờ -f , cờ này khiến SSH đi vào 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ụ: để kết nối với your_domain trên cổng 80 trên server từ xa của bạn, làm cho kết nối khả dụng trên máy local của bạn trên cổng 8888, có thể chạy lệnh:

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

Bây giờ, nếu bạn trỏ trình duyệt web local của bạn đến 127.0.0.1:8888 , bạn sẽ thấy bất kỳ nội dung nào ở your_domain trên cổng 80 .

Hướng dẫn chung 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ó để loại bỏ nó. Bạn có thể thực hiện bằng cách tìm kiếm cổng mà bạn đã chuyển tiếp:

  • ps aux | grep 8888
Output
1001 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ể kết thúc quá trình bằng cách nhắm đến PID, là số trong cột thứ hai của dòng trùng 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 ở phía trước, 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 việc này là bạn có thể dễ dàng tiêu diệt tunnel bằng lệnh CTRL-C .

Cấu hình tunnel từ xa tới server

Kết nối SSH được dùng để tạo tunnel lưu lượng truy cập từ các cổng trên server local đến các cổng trên server từ xa.

Trong một tunnel từ xa, một kết nối được thực hiện với một server từ xa. Trong quá trình tạo tunnel , một cổng từ xa được chỉ định. Cổng này, trên server từ xa, sau đó sẽ được kết nối với server lưu trữ và kết hợp cổng được kết nối từ máy tính local . Điều này sẽ cho phép máy tính từ xa truy cập server thông qua máy tính local của bạn.

Điều này có thể hữu ích nếu bạn cần cho phép truy cập vào mạng nội bộ bị khóa với các kết nối bên ngoài. Nếu firewall cho phép các kết nối ngoài mạng, điều này sẽ cho phép bạn kết nối với một máy từ xa và lưu lượng tunnel từ máy đó đến một vị trí trong mạng nội bộ.

Để cài đặt tunnel từ xa tới server từ xa của bạn, bạn cần sử dụng tham số -R khi kết nối và bạn phải cung cấp ba phần thông tin bổ sung:

  • Cổng mà server từ xa có thể truy cập vào kết nối tunnel .
  • Server lưu trữ mà bạn muốn máy tính local của bạn kết nối.
  • Cổng mà bạn muốn máy tính local của bạn kết nối.

Chúng được đưa ra, theo thứ tự ở trên (phân tách bằng dấu hai chấm), làm đối số cho cờ -R . Ta cũng sẽ sử dụng cờ -f , cờ này khiến SSH đi vào 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ụ: để kết nối với your_domain trên cổng 80 trên máy tính local của ta , làm cho kết nối khả dụng trên server từ xa của ta trên cổng 8888 , có thể chạy lệnh:

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

Bây giờ, trên server từ xa, mở trình duyệt web đến 127.0.0.1:8888 sẽ cho phép bạn xem bất kỳ nội dung nào có trong your_domain trên cổng 80 .

Hướng dẫn chung 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ó để loại bỏ nó. Bạn có thể thực hiện bằng cách tìm kiếm cổng mà bạn đã chuyển tiếp:

  • ps aux | grep 8888
Output
1001 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ể kết thúc quá trình bằng cách nhắm đến PID, là số trong cột thứ hai, của dòng trùng 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 ở phía trước, 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 việc này là bạn có thể dễ dàng tiêu diệt tunnel bằng lệnh CTRL-C .

Cấu hình tunnel động tới server từ xa

Kết nối SSH được dùng để tạo tunnel lưu lượng truy cập từ các cổng trên server local đến các cổng trên server từ xa.

Đường hầm động tương tự như tunnel local ở chỗ nó cho phép máy tính local kết nối với các tài nguyên khác thông qua một server từ xa. Một tunnel động thực hiện điều này bằng cách chỉ định một cổng local duy nhất. Các ứng dụng muốn tận dụng cổng này để đào tunnel phải có thể giao tiếp bằng giao thức SOCKS để các gói tin có thể được chuyển hướng chính xác ở phía bên kia của tunnel .

Truy cập được chuyển đến cổng local này sẽ được gửi đến server từ xa. Từ đó, giao thức SOCKS sẽ được diễn giải để cài đặt kết nối đến vị trí terminal mong muốn. Cài đặt này cho phép ứng dụng hỗ trợ SOCKS kết nối với bất kỳ vị trí nào thông qua server từ xa mà không cần nhiều tunnel tĩnh.

Để cài đặt kết nối, ta sẽ chuyển cờ -D cùng với cổng local nơi ta muốn truy cập vào tunnel . Ta cũng sẽ sử dụng cờ -f , cờ này khiến SSH đi vào 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ụ, để cài đặt một tunnel trên cổng 7777 , có thể chạy lệnh:

  • ssh -f -N -D 7777 username@remote_host

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

Phương pháp chuyển hướng lưu lượng đến cổng SOCKS sẽ khác nhau tùy theo ứng dụng. Ví dụ, trong Firefox, vị trí chung là Tùy chọn> Nâng cao> Cài đặt> Cấu hình proxy thủ công. Trong Chrome, bạn có thể khởi động ứng dụng với bộ --proxy-server= . Bạn cần sử dụng giao diện localhost và cổng bạn đã chuyển tiếp.

Vì kết nối ở chế độ nền, bạn sẽ phải tìm PID của nó để loại bỏ nó. Bạn có thể thực hiện bằng cách tìm kiếm cổng mà bạn đã chuyển tiếp:

  • ps aux | grep 8888
Output
1001 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ể kết thúc quá trình bằng cách nhắm đến PID, là số trong cột thứ hai, của dòng trùng 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 ở phía trước, 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 việc này là bạn có thể dễ dàng tiêu diệt tunnel bằng lệnh CTRL-C .

Sử dụng mã thoát SSH để kiểm soát kết nối

Ngay cả sau khi cài đặt phiên SSH, vẫn có thể thực hiện quyền kiểm soát kết nối từ bên trong terminal . Ta có thể thực hiện việc này với một thứ gọi là mã thoát SSH, cho phép ta tương tác với phần mềm SSH local của bạn ngay trong một phiên.

Buộc ngắt kết nối từ phía khách hàng (Cách thoát khỏi phiên bị kẹt hoặc bị đóng băng)

Một trong những tính năng hữu ích nhất của OpenSSH mà hầu như không được chú ý là khả năng kiểm soát các khía cạnh nhất định của phiên từ bên trong.

Các lệnh này có thể được thực hiện bắt đầu bằng ký tự điều khiển ~ trong phiên SSH. Các lệnh điều khiển sẽ chỉ được hiểu nếu chúng là lệnh đầu tiên được nhập sau 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 điều khiển hữu ích nhất là khả năng bắt đầu ngắt kết nối với client . Các kết nối SSH thường bị server đóng, nhưng đây có thể là sự cố nếu server đang gặp sự cố hoặc nếu kết nối đã bị hỏng. Bằng cách sử dụng ngắt kết nối phía client , kết nối có thể được đóng hoàn toàn khỏi client .

Để đóng kết nối từ client , hãy sử dụng ký tự điều khiển ( ~ ), với một dấu chấm. Nếu kết nối của bạn gặp sự cố, bạn có thể đang ở trong một phiên giao dịch terminal bị kẹt. Nhập các lệnh mặc dù thiếu phản hồi để thực hiện ngắt kết nối phía client :

  • [ENTER]
  • ~.

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

Đặt một Phiên SSH vào Nền

Một trong những tính năng hữu ích nhất của OpenSSH mà hầu như không được chú ý là khả năng kiểm soát các khía cạnh nhất định của phiên từ bên trong kết nối.

Các lệnh này có thể được thực hiện bắt đầu bằng ký tự điều khiển ~ từ bên trong kết nối SSH. Các lệnh điều khiển sẽ chỉ được hiểu nếu chúng là lệnh đầu tiên được nhập sau 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.

Một khả năng mà điều này cung cấp là đặt một phiên SSH vào nền. Để thực hiện việc này, ta cần cung cấp ký tự điều khiển ( ~ ) và sau đó thực thi phím tắt thông thường để làm nền cho một tác vụ (CTRL-z):

  • [ENTER]
  • ~[CTRL-z]

Điều này sẽ đặt kết nối vào nền, đưa bạn trở lại phiên shell local của bạn. Để quay 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ể chạy lại ngay tác vụ nền mới nhất của bạn bằng lệnh :

  • fg

Nếu bạn có nhiều công việc chạy nền, bạn có thể xem các công việc hiện có bằng lệnh :

  • jobs
Output
[1]+ Stopped ssh username@some_host [2] Stopped ssh username@another_host

Sau đó, bạn có thể đưa bất kỳ nhiệm vụ nào lên nền trước bằng cách sử dụng index 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 kết nối SSH hiện có

Một trong những tính năng hữu ích nhất của OpenSSH mà hầu như không được chú ý là khả năng kiểm soát các khía cạnh nhất định của phiên từ bên trong kết nối.

Các lệnh này có thể được thực hiện bắt đầu bằng ký tự điều khiển ~ từ bên trong kết nối SSH. Các lệnh điều khiển sẽ chỉ được hiểu nếu chúng là lệnh đầu tiên được nhập sau 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 điều mà điều này cho phép là user có thể thay đổi cấu hình chuyển tiếp cổng sau khi kết nối đã được cài đặt . Điều này cho phép bạn tạo hoặc gỡ bỏ các luật chuyển tiếp cổng một cách nhanh chóng.

Các khả năng này là một phần của giao diện dòng lệnh SSH, có thể được truy cập trong một phiên bằng cách sử dụng ký tự điều khiển ( ~ ) và “C”:

  • [ENTER]
  • ~C
ssh> 

Bạn sẽ nhận được một dấu nhắc lệnh SSH, có một tập hợp các lệnh hợp lệ rất hạn chế. Để xem các tùy chọn có sẵn, bạn có thể nhập -h từ dấu nhắc này. Nếu không có gì được trả lại, bạn có thể phải tăng độ chi tiết của kết quả SSH của bạn bằng cách sử dụng ~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 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 (xem phần chuyển tiếp để biết thêm thông tin). Bạn cũng có thể phá hủy một tunnel bằng lệnh “kill” liên quan được chỉ định bằng “K” trước ký tự loại chuyển tiếp. Ví dụ, để giết một chuyển tiếp local ( -L ), bạn có thể sử dụng lệnh -KL . Bạn sẽ chỉ cần cung cấp cổng cho việc này.

Vì vậy, để cài đặt một cổng chuyển tiếp local , có thể chạy lệnh:

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

Cổng 8888 trên máy tính local của bạn bây giờ sẽ có thể giao tiếp với web server trên server lưu trữ mà bạn đang kết nối. Khi bạn hoàn thành, bạn có thể xóa nó về phía trước bằng lệnh :

  • [ENTER]
  • ~C
  • -KL 8888

Kết luận

Các hướng dẫn trên sẽ bao gồm phần lớn thông tin mà hầu hết user cần về SSH hàng ngày. Nếu bạn có các thủ thuật khác hoặc muốn chia sẻ các cấu hình và phương pháp yêu thích của bạn , hãy sử dụng các comment bên dưới.


Tags:

Các tin trước