Bir SSH ters portu GatewayPorts etkin olmadan ileri yapmak


1

İki makinem var, m1 ve m2 ve makine m2, SSH kullanarak m1'e bağlanabilir. Sadece m1'e bağlanabilen bir makine m1bis ve sadece m2'nin bağlanabileceği bir m2bis var. M1bis'in, m1b makinesinin bazı m 2 portlarına bağlanarak bazı q limanda makine m2bis'e ulaşmasını sağlamak istiyorum. Hem p hem de q'nun ayrıcalıklı olmayan bağlantı noktaları olduğunu varsayalım, yani, 1024'ten büyükler.

+-------+   q   +----+   SSH   +----+   p   +-------+
| m1bis | ----> | m1 | <------ | m2 | ----> | m2bis |
+-------+       +----+         +----+       +-------+

M1 ve m2'ye kabuk erişimim var. Bunu yapmamın genel yolu, aşağıdakini m2 kullanarak çalıştırmak için SSH ters portu olacaktı.

ssh -R *:q:m2bis:p m1

Bu, SSH cini m1'deki tüm arabirimlerde q numaralı bağlantı noktasını dinlemesini ve gelen bağlantıları makine m2bis bağlantı noktasına p aktarmasını sağlar. Bu şekilde, m1bis, m1'in m1 portuna bağlandığında, bağlantı SSH tarafından m1'den m2'ye yönlendirilir ve bağlantı aslında makine m2bis'in p portunda gerçekleşir. Çok uzak çok iyi.

Sorun, ayarın GatewayPorts=yesm1'deki SSH sunucu yapılandırmasında etkinleştirilmesini gerektirmesidir . Ancak, etkin değil ve m1'de kök kullanmıyorum, bu yüzden etkinleştiremiyorum.

Bununla birlikte, bana bu konuda çalışmamı engelleyen hiçbir şey yokmuş gibi geliyor ve yine de port iletimi yapıyor: m1'e kabuk erişimim var, m1 ve m2 arasında bir SSH bağlantım olabilir, m1'de dinleyen bir işlemi çalıştırabilirim Tüm arabirimlerde q bağlantı noktasında (SSH arka planının dinlemesini yapmak yerine) ve bağlantıyı SSH üzerinden yönlendirir. Bu yüzden, esasen kendi limanımı ilerletmek için gerekli tüm izinlere sahibim.

Bunu gerçekten yapabilir miyim ve yapmanın kolay bir yolu var mı?

Ek gereksinimler:

  • Ben m1 kök değilim, ben karmaşık bağımlılıklar olmadan bir çözüm gibi ortak kamu hizmetleri ile ideal bazı kabuk komut tercih ediyorum netcat, socatvb veya bazı müstakil C programı.
  • M2 ise kökündüm, eğer yardımcı olursa (ama prensipte buna ihtiyacım olması gerektiğini düşünmüyorum).
  • M1 ve m2 arasındaki bağlantıya güvenmiyorum, bu nedenle yönlendirme m1 ve m2 arasında şifrelenmelidir (yani gerçekten SSH üzerinden geçmelidir).

Yanıtlar:


5

İşe yarayacak bir çözüm, kendi SSH daemon'unuzu m1 üzerinde çalıştırmaktır, ki bu root olmadan yapılabilir. Normal bir kullanıcı olurken SSH arka plan programının nasıl çalıştırılacağı aşağıda açıklanmıştır.

İlk önce ana bilgisayar anahtarlarını oluşturun:

ssh-keygen -f test_host_rsa -N  '' -t rsa
ssh-keygen -f test_host_dsa -N  '' -t dsa
ssh-keygen -f test_host_ed25519 -N  '' -t ed25519

Ardından, sshd'niz için bir yapılandırma dosyası yazın; burada 2222, m1'de kullanılmayan ve hangi m2'nin bağlanabileceği ve mevcut klasöre giden mutlak yolu belirtmeniz gereken ayrıcalıklı bir bağlantı noktasıdır:

cat >sshd_config <<EOF
Port 2222
HostKey /folder/where/the/files/are/test_host_rsa
HostKey /folder/where/the/files/are/test_host_dsa
HostKey /folder/where/the/files/are/test_host_ed25519
GatewayPorts yes

Şimdi SSH daemon'unuzu çalıştırın:

/usr/sbin/sshd -f sshd_config

Artık, m2, 2222 m1 numaralı bağlantı noktasına bağlanabilir ve SSH arka planında GatewayPorts etkin olduğundan, geri ileri bağlantı noktasını çalıştırabilir. Başka bir deyişle, m2 olarak çalıştırabilirsiniz:

ssh -p 2222 -R *:q:m2bis:p m1

2

Bir arkadaş başka bir çözüm önerdi: socatkomut m1 üzerine kurulursa, geri besleme adresini dinlerken, bazı q2 bağlantı noktalarında, yani aşağıdakileri m2'de çalıştırarak SSH ters bağlantı noktasını ileri doğru yapabilirsiniz:

ssh -R q2:m2bis:p m1

Ve socatm1 üzerinde aşağıdaki gibi kullanın ; bu, q bağlantı noktasındaki gelen bağlantıları geri döngü adresini dinleyen bağlantı noktası yönlendirmesine yönlendirir:

socat tcp-listen:q,reuseaddr,fork tcp:localhost:q2
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.