Câu trả lời:
Rất đơn giản với các phiên bản OpenSSH đủ gần đây nếu bạn lên kế hoạch trước.
Mở kết nối chính lần đầu tiên. Đối với các kết nối tiếp theo, định tuyến các kết nối nô lệ thông qua kết nối chính hiện có. Trong của bạn ~/.ssh/config
, thiết lập chia sẻ kết nối sẽ tự động xảy ra:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Nếu bạn bắt đầu một phiên ssh đến cùng (người dùng, cổng, máy) như một kết nối hiện có, phiên thứ hai sẽ được chuyển qua phiên thứ nhất. Thiết lập kết nối thứ hai không yêu cầu xác thực mới và rất nhanh.
/var/log/secure
và /var/log/auth.log
đăng nhập kết nối SSH; một kết nối nô lệ không xuất hiện ở đó vì nó cõng trên một kết nối hiện có. Nếu phiên ssh của bạn phân bổ một thiết bị đầu cuối (nghĩa là ssh somehost
không có lệnh được cung cấp, hoặc ssh -t
), nghĩa là (thông thường) đã đăng nhập wtmp
, bất kể thiết bị đầu cuối đó xuất hiện như thế nào (sshd, bất kỳ phương thức nào đã được sử dụng để thiết lập kết nối, ứng dụng trình giả lập thiết bị đầu cuối, bù).
ControlPersist 600
độ trễ trong vài giây của ổ cắm ở chế độ chờ trước khi nó tự động bị xóa. Nếu không, nó sẽ tự động đóng lại khi kết nối chính kết thúc. Điều đó không tốt cho việc thực thi một loạt các lệnh từ xa (ví dụ: một loạt các lệnh rsync đến các thư mục khác nhau)
-S
(chỉ định ổ cắm) và -M
(tạo kết nối chính) của máy khách SSH.
Điều đó khá dễ dàng để đạt được bằng cách sử dụng công cụ nc và đường hầm ssh.
Trong phiên ssh của bạn, gõ ~Cvào một dòng mới. Bạn sẽ nhận được lời nhắc "bảng điều khiển dịch vụ" ssh trông như thế này:
ssh>
Nhập lệnh chuyển tiếp cục bộ để mở đường hầm ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Tên targethost
máy chủ hoặc địa chỉ IP của máy bạn được kết nối ở đâu.
Bây giờ, giả sử máy chủ ssh trên máy đích không được cấu hình để cấm các đường hầm, bạn có chuyển tiếp kết nối mong muốn: ssh
máy khách trên máy của bạn lắng nghe cổng 22000 và nó sẽ chuyển tiếp bất kỳ lưu lượng nào được gửi đến cổng 22001 trên targethost
.
Điều này đơn giản như việc nhập vào phiên ssh đã mở của bạn bằng lệnh sau:
remote$ nc -l localhost 22001 | sh
Điều này sẽ khởi động máy chủ TCP lắng nghe trên cổng 22001 - là cổng đích của đường hầm ssh của chúng tôi - và định tuyến dữ liệu nhận được (có lẽ là các lệnh shell) đến một targethost
thể hiện shell.
local$ cat yourscript.sh | nc localhost 22000
Điều này sẽ gửi phần thân của tập lệnh đến đường hầm ssh của bạn và cuối cùng sẽ được thực thi trong một trình bao trên targethost
. Bạn sẽ thấy đầu ra của tập lệnh trong thiết bị đầu cuối của bạn với phiên ssh.
Tôi cũng sẽ lưu ý rằng đường hầm ssh (bước 1.) trong kịch bản này không bắt buộc; bạn cũng có thể khởi động máy chủ mở và kết nối trực tiếp với nó qua internet. Tuy nhiên, bạn sẽ cần sử dụng đường hầm nếu máy chủ đích không thể truy cập trực tiếp (ví dụ: phía sau NAT) hoặc mã hóa ssh là mong muốn.
~
nhân vật phải đến sau một dòng mới, vì vậy LF ~ C
có lẽ là một chuỗi tốt hơn.
less
, máy nhắn tin mặc định phổ biến, hỗ trợ tìm kiếm có thể giúp bạn tiết kiệm một số cuộn nếu bạn biết từ khóa của mình: chỉ cần gõ man ssh
/ESCAPE
và bạn đang ở đó.