Tünelleri bir kabuk betiğinden arka plan işlemleri olarak nasıl yönetebilirim?


19

Bir kabuk betiğinden birkaç ssh tüneli kurmam gerekiyor. Bunları kullanarak bg görevleri olarak çalıştırmayı denedim:

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

ancak tünelleri bu şekilde başlattığımda düzgün çalışmıyor gibi görünüyor.

Onları kendi sekmelerinde manuel olarak ayarladığımda iyi çalışıyorlar, bu yüzden bir sonraki fikrim komut dosyasının Terminal'de yeni sekmeler açmasını ve komutları ön plan işlemleri olarak çalıştırmasını sağlamak.

Not: Bu soru aslında "Kabuktan yeni bir terminal sekmesi nasıl başlatılır ve sonra bir komut çalıştırılır?", Ancak tünellerle ilgili iki cevap aldım. "Bir kabuk açma" sorusu için, bunu çalışacak SuperUser'da buldum , ancak arka planda yeni sekmeler açtığı ön plan pencerelerine tercih edilir.


Sunucuya etkin bir SSH oturumu mu düzenliyorsunuz? Yani, tünelleriniz arka planda ve gerçekten çalıştığınız bir ön plan SSH oturumunuz var mı?
Jack M.

Şimdiye kadar üç sekmeyi açık tuttum: her tünel için bir tane, diğeri için bir tane. Gerçek işimin çoğu Eclipse ve bir tarayıcıda gerçekleşiyor.
sprugman

(Tüneller sadece yerel Tomcat
örneğimden

Yanıtlar:


26

Bu teknik olarak sorulan soruya bir cevap değil, daha ziyade açıklandığı gibi probleminize bir cevaptır. Ssh komutunun sizin için yararlı olabilecek iki anahtarı vardır:

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

ssh'ye, gerekli parolaları soracak kadar uzun süre ön planda kalmasını söyler ve daha sonra kendisini herhangi bir uzak komutu yürütmekle kalmaz, sadece tüneli idare eder.

Bunun gerçekten bir sekmede görünmesini istiyorsanız farklı bir çözüm isteyebilirsiniz.


Anahtarları ayarladım, bu yüzden parola girmem gerekmiyor, ama işe yarıyor gibi görünüyor. Teşekkürler! Bir soru: zaman aşımına uğradıklarını görmek veya bitirmek için tünellere nasıl erişebilirim? Ne jobsde psonlara bir tanıtıcı listeler ....
sprugman

2
ps -wwajx | grep ssh size süreçleri göstermeli, sonra uygun gördüğünüz gibi onları öldürebilirsiniz.
zzz

2
Sonunda -fişlemi atlar ve arka planla &yaparsanız, daha $!sonra komut dosyanızda tünel işlemini öldürmek için bir tanıtıcı olarak PID'yi alabileceğinizi eklemek isterim .
bk138

6

Tünellerinizi "ne olursa olsun" bağlantınıza entegre etmenizi öneririm. ~/.ssh/configDosyanıza uygun girişleri ekleyerek bunu kolaylaştırabilirsiniz :

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

Daha sonra çalıştırarak giriş yapabilirsiniz:

> ssh server2

Tüneller gelip çalışmaya başlamalı ve sizi "ne olursa olsun" yapacak tek bir SSH örneğiyle bırakmalıdır. İçin ikinci bir bağlantı açmanız gerekiyorsa server2, bir hata alabilirsiniz:

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

Bu gözlerinizden başka hiçbir şeye zarar vermez. Ayrıca, diğer sunucular için benzer satırlar ekleyerek bu yönlendirmeleri birden çok sunucu için ayarlayabilirsiniz; bunların tümü otomatik olarak gerçekleşir.


@ zzz'ın cevabı aşağı yukarı aynı şeyi yapıyor gibi görünüyor ve biraz daha basit. Yine de teşekkürler.
sprugman

Bu, -f -N seçenekleriyle birlikte, tek seferde birden çok bağlantı noktası için yönlendirme kurmanın mükemmel bir yoludur. Teşekkürler dostum.
narsk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.