Bağlanan bilgisayara ters SSH bağlantısını nasıl yapılandırabilirim?


20

Yakın gelecekte yönlendiricilerin arkasında olacak bir dizi makine dağıtacağım. Her yönlendiricide ve bağlantı noktası iletmede dinamik DNS ayarlamak mümkün olmayacaktır, bu nedenle bu makineleri bilgisayarımla bir TCP bağlantısı başlatacak ve sonra bilgisayarımın uzak bilgisayara bir SSH bağlantısı başlatacak şekilde yapılandırabilirim bu bağlantı?

IE:

COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A

Bu mümkün mü ve eğer öyleyse, bunu nasıl yapabilirim?


Yanıtlar:


21

In /etc/ssh/sshdiçin Bilgisayar B kümesi:

AllowTcpForwarding yes
TCPKeepAlive yes

Gönderen Bilgisayar A :

$ ssh -R 2222:localhost:22 ip.of.computer.b

Gönderen Bilgisayar B :

$ ssh localhost -p 2222

2222'nin seçtiğim keyfi bir yüksek bağlantı noktası numarası olduğuna dikkat edin. Bilgisayar B üzerindeki bu port daha sonra Bilgisayar A'da port 22'ye başlatılan SSH bağlantısı üzerinden tünellenecektir. Birden fazla makineniz varsa, her makine için farklı bir port kullanmanız gerekir.

Kullanım durumunuz için bunu bir betikten çalıştırmak isteyeceksiniz, böylece bunu bir daemon yapabilir ve bağlantı kesilirse periyodik olarak yeniden bağlanmayı deneyebilirsiniz. Muhtemelen sadece bir kabuk ile özel bir hesap isteyeceksiniz /bin/trueüzerinde Bilgisayar B gelen bağlantıları işlemek için. Daha sonra, her makine için "ev aramasına" izin verilen tek bir anahtar veya birden çok anahtar ayarlayabilirsiniz.

On Bilgisayar A bulabilceğini -n, -Nve -Tsadece tünel açmak, herhangi bir uzak çalıştırmayı, değil (arka planda çalışabilmesi için) ve bir tty oluşturmaz kullanışlı seçenekler yerel girişten kesmek için.

Bir daemon yaratmanın en normal yöntemleri böyle bir ağ tüneli kurmakla pek işe yaramaz. Ağ bağlantısındaki bir sorun, geçmesi için duvarı yıkmaya çalışmasını sağlayacaktır. Beklemek için bir uyku ile basit bir döngü hile yapmalıdır. On dakika güzel bir sayıdır, çünkü bir sorunla karşılaşmazsa ağı ve günlük dosyalarını girişimlerle ( Bilgisayar B'nin çevrimdışı olması gibi ) değil, ancak bağlantı kesilirse yine de oldukça hızlı bir şekilde geri almanızı sağlar.

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

Bunun gibi bir komut dosyası önyüklemede çalıştırılabilir /etc/rc.local. Makinede ilk oturum açışınız Bilgisayar A önyüklemesinden yaklaşık on dakika sonra başlayacaktır .


1
Güzel. Yani temelde her uzak makinenin yerel SSH portunu yerel makinedeki bir porta tünellemesini ister miydim? Her makinenin yalnızca talep üzerine bağlantıyı tünellendirmesi akıllıca olabilir. Her makinenin canlı bir HTTP bağlantısını açmasını ve yönetimi tersine çevirmeyi denediğimde XML verilerini zorlayabilmem mümkün olabilir, böylece yönetimi kolaylaştırır (ve tüm bağlantı noktalarımı tıkamaz);). Teşekkürler!
Naftuli Kay

@TKKocheran: Aralarından seçim yapabileceğiniz birkaç bağlantı noktası var ... özellikle kiosklarınız olduğundan daha fazlası. Bir SSH tünelini açık tutmak, http bağlantısını açık tutmaktan daha kötüdür?
Caleb

Sanırım haklısın, bunu yapabilirdim, ama sonra portları makinelere eşlemeliyim ve hangisinin hangisi olduğunu hatırlamalıydım, oysa diğer rota tembel bir şekilde başlatılacaktı, yani sadece istendiğinde bir SSH tüneli oluşturacaktı.
Naftuli Kay

1
@TKKocheran: Haritalamayı her iki şekilde de yapmanız gerekir, aksi takdirde tembel örneklemeniz bile birbirlerini tıkmaya çalıştıkları durumlarla karşılaşır.
Caleb

1
Genel olarak uygulanabilir olup olmadığını bilmiyorum, ancak sshd yapılandırmam şimdi açık/etc/ssh/sshd_config
gc5
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.