Aradığınız şeye ters tünel denir. anahtar ssh
aracı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 lappy
ve 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 ssh
uzak sisteme ayrı ayrı gidersem remotey
ve 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.
giriş remotey
[user@lappy ~]$ ssh remotey
ters tünel portunu test et
[user@remotey ~]$ ssh -p 12345 localhost
ş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, sshd
yapılandırmaları bunu yapmanıza izin vermiyor. Aslında bu özellik etkin ( GatewayPorts
) olmadan ssh
localhost 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, sshd
iş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!
giriş remotey
[user@lappy ~]$ ssh remotey
ters bağlantıyı test et
[user@remotey ~]$ ssh -p 12345 remotey
şimdi geri dönmelisin
root@remotey's password:
Last login: Wed Aug 21 01:49:10 2013 from remotey
[user@lappy ~]$
Referanslar