ssh to private-ip


18

Özel IP 10.150.5.141 (kısıtlı güvenlik duvarı ile) olarak yapılandırılmış, internete ve ArchLinux VPS (bilgisayar B) gerçek ip wxyz ile yapılandırılmış CentOS (bilgisayar A) ile bir bilgisayar var

A bilgisayarına bağlanmak için B bilgisayarına erişebilen başka bir bilgisayar (bilgisayar C) nasıl yapabilirim, ancak C bilgisayarı A bilgisayarına doğrudan bağlanamaz (A'nın kendi özel ağında olduğu için)?

Bir tünelin yerel bağlantı noktalarını başka bir bilgisayara açabileceğini biliyorum: bağlantı noktası, ancak tam tersi nasıl yapılır?

A bilgisayarına kullanarak A bilgisayarına erişmek istiyorum sshancak B bilgisayarıyla A bilgisayarına erişemiyorum, çünkü A bilgisayarındaki ağ kısıtlayıcıdır (dışarı çıkabilir, ancak yönlendirilemez, çünkü yönlendiricilerine erişimim yok)

Böyle bir şey istiyorum:

ssh -connect-to w.x.y.z:22 -open-port vvv -forward-to 10.150.5.141 -port 22

böylece ssh w.x.y.z:vvvC bilgisayarından özel ağa yönlendireceğim 10.150.5.141:22.

Yanıtlar:


14

Aradığınız şeye ters tünel denir. anahtar ssharacılığıyla sağlar -R:

-R [bind_address:]port:host:hostport
       Specifies that the given port on the remote (server) host is to 
       be forwarded to the given host and port on the local side.  This 
       works by allocating a socket to listen to port on the remote side, 
       and whenever a connection is made to this port, the connection is
       forwarded over the secure channel, and a connection is made to host 
       port hostport from the local machine.

OP cevaplarıyla keşfettiğinde sözdizimi aşağıdaki gibidir:

$ ssh -f -N -R vvv:localhost:22 w.x.y.z

Misal

Ağda 2 bilgisayar var lappyve remotey. Bu yüzden şu komutu çalıştırıyorum lappy:

$ ssh -f -N -R 12345:localhost:22 remotey

Çalıştığını doğrulayabilirim:

$ ps -eaf|grep "[l]ocalhost:22"
saml     27685     1  0 11:10 ?        00:00:00 ssh -f -N -R 12345:localhost:22 remotey

Şimdi sshuzak sisteme ayrı ayrı gidersem remoteyve bu komutu çalıştırırsam, uzak sistemin yerel arabirimindeki 12345 bağlantı noktasında bağlantıları kabul ettiğini görebiliyorum:

$ netstat -an|grep :12345
tcp        0      0 127.0.0.1:12345             0.0.0.0:*                   LISTEN      
tcp        0      0 ::1:12345                   :::*                        LISTEN      

Bağlantıyı test etme

Ters ssh tünelinin aşağıdaki gibi çalıştığını görebilirsiniz.

  1. giriş remotey

    [user@lappy ~]$ ssh remotey
    
  2. ters tünel portunu test et

    [user@remotey ~]$ ssh -p 12345 localhost
    
  3. şimdi geri dönmelisin

    user@localhost's password: 
    Last login: Thu Aug  1 17:53:54 2013
    /usr/bin/xauth:  creating new authority file /home/user/.Xauthority
    [user@lappy ~]$ 
    

Localhost ( lo) dışındaki arabirimlerdeki bağlantı noktaları ?

Böyle bir komutu denerseniz başınızı kaşıyor olabilirsiniz ve bu işe yaramazsa veya her zaman localhost ( lo) arabirimindeki bir bağlantı noktasına bağlanır .

Örneğin:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

NOT: Bu komut, 12345 @ remotey bağlantı noktasını açmayı ve 22 @ lappy bağlantı noktasına herhangi bir bağlantıyı tünellemeyi söyler.

Sonra uzaktan:

remotey$ netstat -an|grep 12345
tcp        0      0 127.0.0.1:12345              0.0.0.0:*                   LISTEN   

Neler oluyor, sshdyapılandırmaları bunu yapmanıza izin vermiyor. Aslında bu özellik etkin ( GatewayPorts) olmadan sshlocalhost dışında herhangi bir tünel portunu bağlayamazsınız .

GatewayPorts'u etkinleştirme

remotey$ grep GatewayPorts /etc/ssh/sshd_config
#GatewayPorts no

Etkinleştirmek için bu dosyayı düzenleyin /etc/ssh/sshd_config:

GatewayPorts clientspecified

Ve yeniden başlatın sshd:

remotey$ sudo service sshd restart

Şimdi tekrar deneyin ve peşinde olduğumuz etkiyi görmeliyiz:

lappy$ ssh -f -N -R remotey:12345:lappy:22 remotey

Ve bu sefer uzaktan kontrol edin:

remotey$ netstat -anp | grep 12345
tcp        0      0 192.168.1.3:12345           0.0.0.0:*                   LISTEN      9333/sshd

NOT: Yukarıda, sshdişlemin şimdi 12345 numaralı bağlantı noktasındaki bağlantılar için 192.168.1.3 IP adresine sahip arabirimi dinlediğini görebiliriz .

Bağlantının test edilmesi (bölüm deux)

Şimdi değiştirdiğimiz kurulum ile bu sefer test ettiğimizde. Birincil fark, artık localhost'a bağlanmak zorunda olmamamızdır!

  1. giriş remotey

    [user@lappy ~]$ ssh remotey
    
  2. ters bağlantıyı test et

    [user@remotey ~]$ ssh -p 12345 remotey
    
  3. şimdi geri dönmelisin

    root@remotey's password: 
    Last login: Wed Aug 21 01:49:10 2013 from remotey
    [user@lappy ~]$ 
    

Referanslar


aynı makinede 0.0.0.0:12346 - 127.0.0.1:12345 arasında tünel yapmanın bir yolu var mı?
Kokizzu

1
@Kokizzu - Bunu ayarlamayı denedim ve istediğin şey üzerine akselin etrafına sarılıyorum. Bunu istediğiniz gibi buldum, anattatechnologies.com/q/2012/08/chaining-ssh-tunnels . Bu gece daha sonra çalışmayı deneyeceğim, onunla oynamaktan çekinmeyin ve herhangi bir ilerleme kaydederseniz bana bildirin.
slm

demek istediğim bu değil, ben wxyz bağlamak istiyorum: vvv2 yerine 127.0.0.1 (B bilgisayarında), böylece diğer insanlar da kullanabilirsiniz ..
Kokizzu

1
@Kokizzu - güncellemelere bakın.
slm

2

B bilgisayarı A bilgisayarına erişemediğinden, önce A bilgisayarından uzak bir tünel açmanız gerekir.

ssh user@computerB -R vvv:localhost:22

teşekkürler, ancak ethhost'un IP'sinde localhost dinleyen bir servise yönlendirilen bir port açmanın bir yolu var mı?
Kokizzu

1

nevermind, cevabı buldum:

ssh -f -N -R vvv:localhost:22 w.x.y.z

A bilgisayarından

EDIT: TL; DR, doğru çözüm:

ssh -f -N -R w.x.y.z:vvv:localhost:22 w.x.y.z
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.