Ssh iletmek için ssh tüneli nasıl kurulur?


13

Yapılandıramadığım yönlendiricinin arkasında Ubuntu bulunan bir bilgisayarım var. Ancak o bilgisayara ssh erişimi istiyorum. Bence ssh tünellemeyle mümkün, ama nasıl yapılacağını bilmiyorum. Tünel oluşturmayı istediğim başka bir sunucum var. Nasıl yapılır? Ya da belki bu sorunu nasıl çözeceğiniz hakkında başka bir fikriniz var mı?

Denedim:

ssh -N user@my_server -L 22/localhost/8090

ama diyor ki:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

Yanıtlar:


18

Yerel bağlantı noktanızı 22 dinlemesini ve bağlantıları uzak bir sistemin bağlantı noktası 8090'a iletmesini istiyorsunuz. Yerel bağlantı noktası 22'niz zaten yerel SSH sunucunuz tarafından alındığı için bunu yapamazsınız.

Bence aradığınız şey uzaktan yönlendirme. Değiştirme -L 22:localhost:8090ile -R 8090:localhost:22port 8090 tarihinde dinlemek ve SSH sunucusuna isteklerini iletmek için uzak ana söyleyecektir.

Daha sonra uzak bir siteden girebilmek için bağlantıyı çalışır durumda bırakıyorsanız, ilgili seçenekleri ekleyerek ( -o TCPKeepAlive=yesveya -o ServerAliveInterval=30) bağlantısızlık nedeniyle bağlantının zaman aşımına uğramamasını sağlamak isteyeceksiniz.

Böylece şöyle bir şey elde edersiniz:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

Ayrıca, sizinle sunucu arasındaki ağ atlamalarından biri herhangi bir noktada kesilirse, belirttiğiniz KeepAlive seçeneklerine rağmen bağlantı kesilir, bu nedenle bu komutu inittab'a eklemek veya daemontools paketine veya dağıtımınızın eşdeğer, böylece her zaman önyükleme başlar ve sistem kapatıldıktan sonra başka bir nedenle çıktığında yeniden başlatılır (veya sonsuz döngüler halinde bir kabuk komut dosyasından çalıştırabilirsiniz, ancak init veya daemontools daha temiz çözümlerdir).


Neredeyse işe yarıyor. Bilgisayarıma bağlanabilirim, ancak yalnızca sunucuda oturum açtığımda yapabilirim. O bağlantı noktasından her yerden bağlantı kurmak istiyorum.
klew

3
Sunucunun genel adresini veya joker kartını bağlantı noktası yönlendirme tanımına (-R 111.222.333.444:8090:localhost:22 veya -R *: 8090: localhost: 22) eklerseniz, bu tür bir şey olabilir sunucuda devre dışı bırakılabilir. Sunucu denetlediğiniz bir sunucuysa, sshd_config içinde GatewayPorts seçeneğinin etkinleştirildiğinden emin olun.
David Spillett

Ssh tünellememi yapmama yardımcı olan bir senaryo yazdım, şuradan
Nam Nguyen

GatewayPorts YesSshd_config'ime eklemek , bağlantı noktasını halka açmama yardımcı oldu.
Adam F

8

Bunu yapamamanızın nedeni, yerel bilgisayardaki 22 numaralı bağlantı noktasını uzak sunucudaki 8090 numaralı bağlantı noktasına iletmeye çalışmanızdır ve yerel sunucudaki 22 numaralı bağlantı noktasında bir şey zaten çalışıyor olabilir. Büyük olasılıkla çalışan bir SSH sunucunuz var. 22'yi farklı bir değere değiştirerek bunu düzeltebilirsiniz. Bir bağlantı noktasının boş olup olmadığını kontrol ederek çalıştırabilirsiniz:

# netstat -lep --tcp

Bu, tüm dinleme soketlerini listeler, bu nedenle bağlantı noktası listelenmiyorsa, ücretsizdir.


3

Port ücretsiz olup olmadığını kontrol etmek için lsof -i: PortNumber komutunu kullanıyorum:

# lsof -i :2272

bağlantı noktası boşsa çıkışta hiçbir şey görmezsiniz.

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.