arka plandaki çoklu atlama tüneli; yerel tüneli öldürmek uzak tüneli öldürmez


0

Çok atlama tüneli:

Bir atlama sunucusu aracılığıyla uzaktaki bir sunucuya bir tünel açıyorum.

ssh ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
    ssh ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}

Ben açtığımda Şimdi bir bağlantı localhost:portkendisine iletecek jump:portsırayla iletecek olanremote:port

Yerel tüneli arka planda çalıştır:

Bununla ilgili sorun bir kabuk açmasıdır remote, oysa tünelin arka planda çalışmasını istiyorum.

Bu yüzden -farka planda çalışmasını istemek için yerel tünele seçenek ekledim

ssh -f ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
    ssh ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}

Ancak bu bir hata döndürür:

Pseudo-terminal will not be allocated because stdin is not a terminal.

Tahminen bu hata dan tünelin geliyor jumpiçin remote, çünkü kaynaklanır stdinbenim yerel tünel daemonized zaman kapalıdır.

Uzak tünele söyle bir komut çalıştırmayacağım:

Sonra jump-> remotetüneli çalıştırmaya çalıştım, -Nuzak bir komut çalıştırmayacağımı söylemek için.

ssh -f ${JUMP_HOST} -l ${JUMP_HOST_USER} -L ${PORT}:localhost:${PORT} \
    ssh -N ${REMOTE_HOST} -l ${REMOTE_HOST_USER} -L ${PORT}:localhost:${PORT}

Arka planda tünel çalışır ve ben başarıyla bağlanabilir - Bu harika çalışıyor remote:portbağlanarak localhost:port.

Sorun:

Yaşadığım sorun tünelleri kapatmak istediğimde.

Yerel ssh tünelimin yardımcısına bir öldürme sinyali gönderirsem, kapanacak, ancak devam eden ssh tüneli jumpçalışıyor.

Görünüşe göre yerel tünelimi yeniden düzenlediğimde, tüneldeki jumpdaemonlandı.

Soru:

Yerel tünelimi arka planda çalıştırmak mümkün mü, ama onu öldürdüğümde, tüm uzak sunucularda oluşturduğu tüm tünelleri kapattı mı?


1
Ssh istemciniz henüz desteklemiyor mu -J(jumphost)?
Grawity

@grawity değil gibi görünüyor. $ ssh -V OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 Mar 2016
Steve Lorimer

Sonra ProxyCommand ile -W kullanmanız gerekir. -L gibi ama özellikle bu tür bir kullanım için ... SU hakkında burada yayınlar var.
Grawity

Yanıtlar:


2

Her ikisini de sshyerel olarak çalıştırın . Önce atlama sunucusuna bağlanın ve sshuzaktaki ana bilgisayara yerel bilgisayardan erişmenizi sağlayacak bir tünel oluşturun :

ssh -fN $jump_host -l $jump_host_user -L ${helper_port}:${remote_host}:22

Ardından uzaktaki ana bilgisayara bağlanmak ve bu tüneli oluşturmak için bu tüneli kullanın; hala yerel bilgisayardan:

ssh -fN localhost -p $helper_port -l ${remote_host_user} -L ${port}:localhost:${port}

İki sshişlem yerel olduğundan, istediğiniz zaman killikisini de yapabilirsiniz ; ama ilkini öldürmenin yeterli olacağını düşünüyorum, dene.


Notlar:

  • "İkincil" , atlama sunucusunda sshdepolanan belirli konfigürasyona dayanıyorsa, bu yaklaşım uygun olmayabilir ssh_config.
  • Küçük harfli değişken isimleri kullandım; bkz bu cevabı .
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.