Làm cách nào để quản lý các đường hầm làm tiến trình nền từ tập lệnh shell?


19

Tôi cần thiết lập một vài đường hầm ssh từ tập lệnh shell. Tôi đã thử chạy chúng dưới dạng các tác vụ bg bằng cách sử dụng:

#!/bin/sh
ssh -L 3000:server1:5029 me@server2 &
ssh -L 3001:server3:3306 me@server2 &

nhưng các đường hầm dường như không hoạt động chính xác khi tôi khởi chạy chúng theo cách đó.

Chúng hoạt động tốt khi tôi tự thiết lập chúng trong các tab riêng của chúng, vì vậy ý ​​tưởng tiếp theo của tôi là để kịch bản mở các tab mới trong Terminal và chạy các lệnh trong đó dưới dạng các quy trình nền trước.

Lưu ý: câu hỏi này ban đầu là "Làm cách nào để khởi chạy tab thiết bị đầu cuối mới từ trình bao và sau đó chạy lệnh trong đó?", Nhưng tôi đã nhận được hai câu trả lời về việc xử lý các đường hầm. Đối với câu hỏi "mở vỏ", tôi đã tìm thấy câu hỏi này trên SuperUser , nó sẽ hoạt động, mặc dù các tab mới trong nền sẽ thích hợp hơn với các cửa sổ phía trước mà nó mở.


Bạn có giữ một phiên SSH hoạt động cho máy chủ không? Có nghĩa là, bạn có đường hầm của mình ở chế độ nền và phiên SSH tiền cảnh bạn thực sự làm việc không?
Jack M.

Cho đến bây giờ, tôi vẫn giữ ba tab mở: một cho mỗi đường hầm, cộng với một tab khác cho bất cứ điều gì. Hầu hết các công việc thực tế của tôi diễn ra trong Eclipse và một trình duyệt.
spugman

(Các đường hầm chỉ để tôi có thể truy cập một số dbs từ xa từ ví dụ Tomcat cục bộ của tôi.)
spugman

Câu trả lời:


25

Về mặt kỹ thuật, đây không phải là câu trả lời cho câu hỏi được hỏi mà là câu trả lời cho vấn đề của bạn như được mô tả. Lệnh ssh có hai công tắc có thể hữu ích cho bạn:

ssh -f -N -L 3000:server1:5029 me@server2

bảo ssh treo xung quanh trong tiền cảnh chỉ đủ lâu để yêu cầu bất kỳ mật khẩu cần thiết nào, sau đó đặt chính nó vào nền, không thực hiện bất kỳ lệnh từ xa nào mà chỉ xử lý đường hầm.

Nếu bạn thực sự muốn điều này xuất hiện trong một tab thì bạn có thể muốn một giải pháp khác.


Tôi đã thiết lập khóa, vì vậy tôi không cần nhập mật khẩu, nhưng điều đó dường như hoạt động. Cảm ơn! Một câu hỏi: làm thế nào để tôi truy cập vào các đường hầm để xem họ đã hết thời gian hay kết thúc chúng, v.v.? Cũng khôngjobs phải cũng không psliệt kê một tay cầm cho họ ....
spugman

2
ps -wwajx | grep ssh sẽ cho bạn thấy các quy trình, sau đó bạn có thể giết chúng khi bạn thấy phù hợp.
zzz

2
Tôi muốn thêm rằng nếu bạn bỏ qua -fvà làm nền cho quá trình &ở cuối, bạn có thể lấy PID thông qua $!như một tay cầm để tiêu diệt quá trình đường hầm sau này trong tập lệnh của bạn.
bk138

6

Tôi sẽ đề nghị đơn giản là tích hợp các đường hầm của bạn vào kết nối "một cho bất cứ điều gì". Bạn có thể làm cho nó dễ dàng bằng cách thêm các mục thích hợp vào ~/.ssh/configtệp của bạn :

Host server2
    HostName 10.1.1.1
    User me
    LocalForward 3000 127.0.0.1:5029
    LocalForward 3001 127.0.0.1:3306

Sau đó, bạn có thể đăng nhập bằng cách chạy:

> ssh server2

Các đường hầm sẽ xuất hiện và bắt đầu hoạt động, để lại cho bạn một cá thể SSH duy nhất để thực hiện "bất cứ điều gì". Nếu bạn cần mở kết nối thứ hai server2, bạn có thể gặp lỗi:

> ssh server2
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3001
Could not request local forwarding.

Điều này không làm tổn thương bất cứ điều gì khác ngoài đôi mắt của bạn. Bạn cũng có thể thiết lập các chuyển tiếp này cho nhiều máy chủ bằng cách thêm các dòng tương tự cho các máy chủ khác và tất cả sẽ diễn ra tự động.


Câu trả lời của @ zzz dường như làm điều tương tự, ít nhiều, và đơn giản hơn một chút. Cảm ơn, mặc dù.
spugman

Điều này, kết hợp với các tùy chọn -f -N là một cách tuyệt vời để thiết lập chuyển tiếp cho nhiều cổng trong một lần chụp. Cảm ơn người đàn ông.
narsk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.