CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.
Bài đăng trên blog CFSDN này SSH chỉ hoạt động trên máy chủ Linux từ xa? Điều đó có nghĩa là bạn có quá ít kinh nghiệm! Được tác giả sưu tầm và sắp xếp, nếu bạn quan tâm đến bài viết này thì hãy thích nhé.

Hôm nay tôi sẽ chia sẻ với các bạn bài viết về giới thiệu và cách sử dụng SSH. Bài viết này bắt đầu với SSH là gì, mô tả cách sử dụng cơ bản của SSH và sau đó mô tả độc lập các tình huống khác nhau như đăng nhập từ xa và chuyển tiếp cổng. Tôi hy vọng nó sẽ hữu ích với mọi người.
SSH là gì?
SSH là giao thức mạng được sử dụng để đăng nhập được mã hóa giữa các máy tính. Vào những ngày đầu, mọi giao tiếp trên Internet đều ở dạng văn bản thuần túy và một khi bị chặn, nội dung sẽ bị lộ. Năm 1995, học giả người Phần Lan Tatu Ylonen đã thiết kế giao thức SSH, mã hóa mọi thông tin đăng nhập và trở thành giải pháp cơ bản cho bảo mật Internet. Giao thức này đã được quảng bá nhanh chóng trên toàn thế giới và hiện đã trở thành cấu hình chuẩn cho các hệ thống Linux.
Nguyên lý đăng nhập SSH

Sử dụng SSH cơ bản
ngữ pháp
- ssh -p 22 người dùng@máy chủ
tham số
- -p: Chỉ định số cổng.
- người dùng: Tên người dùng đăng nhập.
- máy chủ: máy chủ để đăng nhập.
Số cổng mặc định là 22. Khi số cổng là 22, có thể bỏ qua và có thể sử dụng trực tiếp phương pháp sau
- ssh người dùng@máy chủ
Ngoài ra, nếu tên người dùng cục bộ giống với tên người dùng đăng nhập từ xa thì tên người dùng đăng nhập cũng có thể bị bỏ qua như sau:
- máy chủ ssh
Ví dụ đăng nhập từ xa SSH
Bây giờ tôi có hai máy ảo Linux, cả hai đều được cài đặt centOS6.5 và địa chỉ IP là 192.168.13.135 và 192.168.13.138, như hiển thị bên dưới:


Bây giờ, điều tôi cần làm là đăng nhập vào 192.168.13.135 qua SSH trên 192.168.13.138.
Đầu tiên, chúng ta có thể sử dụng lệnh sau để kiểm tra xem ssh có được bật trên cả hai máy hay không.
- netstat -ntlp |grep ssh

Sử dụng lệnh sau để kết nối.
- ssh -p 22 root@192.168.13.135
Nếu đây là lần đầu tiên bạn đăng nhập vào máy chủ từ xa trên máy này, giao diện sau sẽ xuất hiện.

Về cơ bản, điều này có nghĩa là tính xác thực của máy chủ không thể được xác nhận và chúng tôi chỉ biết dấu vân tay khóa công khai của máy chủ. Bạn vẫn muốn tiếp tục kết nối chứ? Chỉ cần nhập có.

Sau đó nhập mật khẩu và kết nối sẽ ổn.

Để thoát, chỉ cần gõ exit.

Chuyển tiếp cổng SSH
SSH không chỉ có thể tự động mã hóa và giải mã dữ liệu mạng giữa máy khách SSH và máy chủ mà còn cung cấp một chức năng rất hữu ích, đó là chuyển tiếp cổng, chuyển tiếp dữ liệu mạng của cổng TCP đến một cổng trên máy chủ được chỉ định và mã hóa và giải mã dữ liệu tương ứng trong khi chuyển tiếp. Nếu tường lửa trong môi trường làm việc hạn chế việc sử dụng một số cổng mạng nhưng cho phép kết nối SSH, giao tiếp cũng có thể được thực hiện bằng cách sử dụng cổng được chuyển tiếp bởi SSH. Chuyển tiếp chủ yếu được chia thành hai loại: chuyển tiếp cục bộ và chuyển tiếp từ xa.
1. Các tham số được chuyển tiếp.
- -C: Nén dữ liệu
- -f: Người dùng/mật khẩu xác thực nền, thường được sử dụng với -N, mà không cần đăng nhập vào máy chủ từ xa.
- -N: Không thực thi các tập lệnh hoặc lệnh, thường được sử dụng với -f.
- -g: Trong các tham số -L/-R/-D, máy chủ từ xa được phép kết nối với cổng chuyển tiếp đã thiết lập. Nếu không thêm tham số này, chỉ máy chủ cục bộ mới được phép thiết lập kết nối.
- -L : cổng cục bộ: IP mục tiêu: cổng mục tiêu
- -D : Chuyển tiếp cổng động
- -R : Chuyển tiếp cổng từ xa
- -T: Không phân bổ TTY, chỉ sử dụng nó như một proxy
- -q: Chế độ im lặng, không có thông tin lỗi/cảnh báo nào được đưa ra
2. Chuyển tiếp nội địa.
Một cổng trên máy chủ mạng cục bộ được chuyển tiếp tới một cổng trên máy chủ từ xa. Nói một cách đơn giản, yêu cầu được gửi đến cổng cục bộ sẽ được chuyển tiếp đến cổng đích. Định dạng như sau:
ssh -L địa chỉ card mạng cục bộ: cổng cục bộ: địa chỉ mục tiêu: cổng mục tiêu người dùng@địa chỉ mục tiêu.
Bây giờ chúng ta sử dụng chuyển tiếp cục bộ để giải quyết một vấn đề, ví dụ, chúng ta có hai máy như sau:
cent A (192.168.13.139).
cent B (192.168.13.142).

Bây giờ, mysql đã được cài đặt trên máy CentOS B (192.168.13.142) và được thiết lập để chạy bất kỳ kết nối máy chủ nào như sau:

Tại thời điểm này, centos A (192.168.13.139) có thể kết nối với mysql trên centos B (192.168.13.142), như sau:

Vì vậy, bây giờ tôi khởi động centos B (192.168.13.142) để giới hạn các kết nối IP bên ngoài và chỉ cho phép 127.0.0.1 kết nối, như sau:

Tại thời điểm này, centos A (192.168.13.139) có thể kết nối với mysql trên centos B (192.168.13.142) như thế nào?
Lúc này chúng ta vẫn sử dụng phương pháp kết nối MySQL ở trên và chắc chắn sẽ báo lỗi như sau:

Tất nhiên, mysql vẫn có thể truy cập được trên centos B (192.168.13.142).

Lúc này, chúng ta có thể sử dụng chuyển tiếp cổng cục bộ để ánh xạ một cổng cục bộ tới máy CentOS B (192.168.13.142) như sau:
- ssh -L 127.0.0.1:3306:127.0.0.1:3306 root@192.168.13.142
Vì địa chỉ card mạng cục bộ có thể bị bỏ qua nên việc chuyển tiếp ở trên có thể được rút ngắn thành:
- ssh -L 3306:127.0.0.1:3306 root@192.168.13.142
Tất nhiên, khi kết nối qua ssh, nếu tên người dùng của 2 máy giống nhau thì có thể bỏ qua, tức là có thể rút gọn lệnh thành:
- ssh -L 3306:127.0.0.1:3306 192.168.13.14
Đoạn mã trên chuyển tiếp cổng cục bộ 3306 tới cổng 3306 của 192.168.13.142. Bởi vì mysql trên centos B (192.168.13.142) sử dụng cổng 3606. Tất nhiên, trước tiên chúng ta phải kiểm tra xem cổng cục bộ 3306 có bị chiếm dụng không. Nếu có, chúng ta có thể sử dụng các cổng khác.
Luồng dữ liệu được thể hiện trong hình:

Đầu tiên, ứng dụng trên centos A (192.168.13.139) gửi dữ liệu đến cổng 3306 trên máy cục bộ 127.0.0.1.
Sau đó, centos A (192.168.13.139) chuyển tiếp dữ liệu của cổng 3306 đến cổng 3306 của centos B (192.168.13.142) thông qua SSH.
Sau đó, centos B (192.168.13.142) trả lại dữ liệu đã xử lý cho centos A (192.168.13.139) theo đường dẫn ban đầu.
Nếu đây là lần đầu tiên bạn kết nối với máy cetosB qua ssh, bạn sẽ được nhắc xác nhận khóa công khai và chọn có xác nhận kết nối hay không.

Lúc này, chúng ta có thể kết nối tới mysql trên centos B trên centos A và viết như thế này.
- bin/mysql -h127.0.0.1 -uroot -p
như sau:

Chúng ta có thể sử dụng lệnh sau để xem quá trình giám sát chuyển tiếp ssh trong centosA.

3. Chuyển tiếp từ xa.
Chuyển tiếp từ một cổng trên máy chủ từ xa tới một cổng trên máy chủ trong mạng cục bộ. Nói một cách đơn giản, nó chuyển tiếp yêu cầu được gửi đến cổng từ xa đến cổng đích. Định dạng như sau:
ssh -R địa chỉ card mạng từ xa: cổng từ xa: địa chỉ đích: cổng đích.
Hãy lấy ba chiếc máy sau đây làm ví dụ:
cent A (192.168.13.139).
cent B (192.168.13.142).
win7 (10.18.78.135).
Giả sử win7 (10.18.78.135) và centos B (192.168.13.142) không thể kết nối trực tiếp, nhưng win7 (10.18.78.135) và centos A (192.168.13.139) có thể kết nối với centos B (192.168.13.142) và centos A (192.168.13.139), thì chúng ta có thể sử dụng chuyển tiếp cổng từ xa trên centos A (192.168.13.139) để cho win7 (10.18.78.135) và centos B (192.168.13.142) giao tiếp.
- ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.142
Nghĩa là centos B (192.168.13.142) lắng nghe cổng 80 của riêng nó, sau đó gửi tất cả dữ liệu từ centos A (192.168.13.139) đến win7 (10.18.78.135).
Hoạt động từ xa thông qua SSH
Hoạt động từ xa SSH chủ yếu được sử dụng để thực hiện một hoạt động trên một máy từ xa. Định dạng như sau:
- ssh user@host 'lệnh'
Trường hợp 1: Kiểm tra loại hệ điều hành của máy B (192.168.13.149) trên máy A (192.168.13.148).
Thực thi đoạn mã sau trên máy A:
- ssh dequan@192.168.13.149 'uname -a'
Trường hợp 2: Sao chép thư mục kiểm tra ở máy A (192.168.13.148) sang máy B (192.168.13.149).
Trên máy A, thực hiện lệnh sau:
- tar -cz kiểm tra | ssh dequan@192.168.13.149 'tar -xz'
Tất nhiên, chúng ta cũng có thể sử dụng lệnh scp hoặc lệnh rz để truyền tệp.
Trường hợp 3: Kiểm tra xem máy B (192.168.13.149) có đang lắng nghe trên cổng 1080 tại máy A (192.168.13.148) không.
Trên máy A, thực hiện lệnh sau:
- ssh dequan@192.168.13.149 'netstat -tln |grep 1080'

Chuyển tiếp cục bộ SSH
Nói một cách đơn giản, chuyển tiếp cục bộ có nghĩa là chuyển tiếp yêu cầu cổng được gửi đến máy cục bộ tới máy từ xa. Định dạng như sau:
ssh -L [địa chỉ cục bộ:]cổng cục bộ:địa chỉ từ xa:cổng từ xa người dùng từ xa@địa chỉ từ xa.
Trường hợp 1: Truy cập dịch vụ của máy A (192.168.13.148) trên máy B (192.168.13.149).
Bây giờ, chúng ta khởi động dịch vụ Nginx trên máy A như sau:

Chúng tôi hy vọng rằng máy B cũng có thể sử dụng các dịch vụ trên máy A theo cách này. Yêu cầu cổng 80 trên máy B cần được chuyển tiếp đến máy A. Hiện tại, khi thực hiện lệnh này trên máy B, lỗi được báo cáo như sau:

Bạn cần thực thi đoạn mã sau trên máy B:
- ssh -f -N -L 127.0.01:80:192.168.13.148:80 dequan@192.168.13.148
Sau đó, trên máy B, việc truy cập các dịch vụ của máy A cũng giống như truy cập các dịch vụ của chính máy A.

Chuyển tiếp từ xa SSH
Chuyển tiếp từ xa có nghĩa là chuyển tiếp yêu cầu cổng được gửi đến máy từ xa đến máy cục bộ. Định dạng như sau:
ssh -R [địa chỉ từ xa:]cổng từ xa:địa chỉ cục bộ:cổng cục bộ người dùng từ xa@địa chỉ từ xa.
Trong trường hợp trên, chúng ta cũng có thể thực hiện điều này thông qua chuyển tiếp từ xa. Nghĩa là thực thi đoạn mã sau trên máy A:
- sudo ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
Chúng tôi lắng nghe cổng 8081 của máy B và chuyển tiếp yêu cầu của cổng này tới máy A.
Bạn có thể thấy quá trình giám sát của chúng tôi trên máy B như sau:

Tại thời điểm này, nếu bạn thực hiện lệnh sau, lệnh sẽ được chuyển tiếp đến cổng 80 của 127.0.0.1 của máy A, như sau:

1. Sử dụng chuyển tiếp từ xa để thực hiện chức năng proxy.
Hiện tại, máy B chỉ có thể lắng nghe và chuyển tiếp trên cổng 80 của chính nó là 127.0.0.1. Làm thế nào chúng ta có thể khiến máy B hoạt động như một proxy để chuyển tiếp các yêu cầu từ các máy khác đến máy A? Ví dụ, hiện tại có một máy C (192.168.13.143). C không thể truy cập A, nhưng có thể truy cập B. Làm thế nào để C sử dụng B để truy cập A?
Tại thời điểm này, bạn cần thay đổi trình lắng nghe của B từ 127.0.0.1:8081 thành 0:0.0.0:8081 và sửa đổi cấu hình sshd /etc/ssh/sshd_config.
- vim /etc/ssh/sshd_config
- #Nếu có
- Cổng GatewayPorts không
- #Thay đổi thành
- Cổng Gateway có
- #Không, chỉ cần thêm nó vào
- #Sau đó khởi động lại sshd
- sudo dịch vụ sshd khởi động lại
Sau đó thiết lập lại chuyển tiếp động như sau:
- ssh -f -g -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
Có thể thấy rằng tại thời điểm này, máy B đã lắng nghe 0:0.0.0:8081.

Trên máy C, chúng tôi mô phỏng yêu cầu thông qua curl và sử dụng máy B làm proxy, như sau:
- cuộn tròn -x 192.168.13.149:8081 127.0.0.1

Tất nhiên, nếu có những máy khác, bạn cũng có thể sử dụng phương pháp tương tự để yêu cầu máy A.
Chuyển tiếp động của SSH
Đối với việc chuyển tiếp cục bộ và từ xa của SSH, bạn cần liên kết từng cổng cục bộ và cổng từ xa. Định dạng như sau:
ssh -D [địa chỉ cục bộ:]số cổng cục bộ người dùng từ xa@địa chỉ từ xa.
Ví dụ, tất cả các yêu cầu được gửi đến máy B sẽ được chuyển tiếp đến máy A và máy A sẽ thực hiện các yêu cầu đó.
Các vấn đề với SSH
Nếu ai đó chặn yêu cầu đăng nhập, sau đó mạo danh máy chủ từ xa và gửi khóa công khai giả mạo cho người dùng, người dùng sẽ khó có thể phân biệt được tính xác thực. Bởi vì không giống như giao thức https, khóa công khai của giao thức SSH không được chứng thực bởi cơ quan cấp chứng chỉ (CA), tức là nó được tự ký.
Có thể hình dung rằng nếu kẻ tấn công chen vào giữa người dùng và máy chủ từ xa (chẳng hạn như trong khu vực Wi-Fi công cộng), hắn có thể lấy được mật khẩu đăng nhập của người dùng bằng khóa công khai giả mạo. Nếu bạn sử dụng mật khẩu này để đăng nhập vào máy chủ từ xa một lần nữa, cơ chế bảo mật của SSH sẽ bị phá hủy hoàn toàn. Rủi ro này được gọi là "Tấn công trung gian".
Tóm tắt
Bài viết này chủ yếu giới thiệu các khái niệm cơ bản về SSH và một số phương pháp thường dùng trong thực tế. Không liên quan đến các nguyên tắc sâu xa và kiến thức tối ưu hóa. Có thể nghiên cứu sâu hơn về việc triển khai cơ bản và nội dung cụ thể của giao thức.
Liên kết gốc: https://mp.weixin.qq.com/s/2Zz8U8J-L8HSTPt2l9bK9g.
Cuối cùng, bài viết này nói về SSH chỉ có thể sử dụng cho máy chủ Linux từ xa? Điều đó có nghĩa là bạn có quá ít kinh nghiệm! Đây là phần cuối của bài viết. Nếu bạn muốn biết thêm về SSH chỉ có thể sử dụng cho máy chủ Linux từ xa? Điều đó có nghĩa là bạn có quá ít kinh nghiệm! Vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!