Ssh tünelimin başarıyla oluşturulduğunu nasıl anlarım?


21

tunnel.shBir ssh tüneli canlı tutmak için başkaları tarafından yazılmış şu betiğe güveniyorum :

#!/bin/bash
export SSH_HOST=tim@server 

if [ ! -f /tmp/.tunnel ] 
then
echo "Creat SSH tunnel"
ssh -f -D 9999 $SSH_HOST "if [ -f ~/.tunnel ]; then rm ~/.tunnel; fi; while [ ! -f ~/.tunnel ]; do echo > /dev/null; done" & 
touch /tmp/.tunnel 
else
echo "Close SSH tunnel"
ssh $SSH_HOST "touch ~/.tunnel" 
rm /tmp/.tunnel 
fi
exit

Kalıcı bir ssh tüneli oluşturmak için, sadece yayınladım tunnel.sh. Tünel tunnel.shtekrar açana kadar kapanmayacak .

Ssh tünelinin gerçekten başarılı bir şekilde oluşturulduğunu nasıl doğrulayabileceğimi merak ediyordum.

Tüneldeki temel kullanımım, dokümanları sunucuyla aynı LAN'daki bazı yazıcılara yazdırmak ve yazıcılara yalnızca LAN içinden erişilebiliyor. Bir tünel oluşturduktan sonra, şimdi yazdırmak herhangi bir sorun bildirmiyor, ancak fiziksel olarak orada olmadığımdan, belgelerin gerçekten yazdırılıp yazdırılmadığını kontrol edemiyorum.

Tünel sayesinde şu anda LAN'dayken, harici IP adresimin sunucununkiyle aynı olması gerektiğini düşündüm. Ama aslında onlar aynı değil (onları buldum wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'). Nedenini merak ediyorum? İnternetteki bazı web sitelerine canlı tünel ile bağlandığımda, sunucu ben ve sunucunun arasındaki tünel yüzünden bağlantı ile internet sitesi arasındaki orta nokta değil mi?

Yanıtlar:


25

Bu olması gerekenden çok daha karmaşık.

Tüneli başlat:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

Tüneli durdur:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

.

Tek yapman gereken bu. Ayrıntıları istiyorsanız, aşağıya atlayın.

İkinci sorunuz için IP olanı. Hayır, IP'niz değişmez. Tek yapmanız gereken uzak ana bilgisayardan SOCKS proxy'si oluşturmaktı. Siz söylemediğiniz sürece sisteminiz bu proxy'yi otomatik olarak kullanmaz.

SSH açıklaması
Tüneli başlatmanın argümanları:: ssh'ye
-fkendi arkaplanını söyle. Yalnızca başarılı bir şekilde başladığında kendisini arka plan edecektir ( -oaşağıdaki argümanla işbirliği yapar ).
-o ExitOnForwardFailure=yes: Bu, ssh'a SOCKS proxy'sini ayarlayamaması durumunda çıkmasını söyler.
-N: Bir komut çalıştırma. Sadece tünel açmak istiyoruz, uzak ana bilgisayarda hiçbir şey yapmıyoruz.
-D 9999: SOCKS vekiliniz.
-M: -S argümanının burada çalışması için bu gereklidir.
-S /tmp/ssh_tunnel_%h.sock: Bu, /tmp/ssh_tunnel_HOSTNAME.sock komutunu kontrol soketi için kullanmasını söyler. -MSeçenek ssh ihtiyaçları başka ssh zaten soket üzerinde dinlemeye konu komutları bu yuva kurmayı değil o söyler. Bu soketi, ssh zaten çalıştıktan sonra ek tüneller ayarlamak için kullanabilirsiniz. %h Uzak sunucunun ana bilgisayar adını dosya adının bir parçası olarak kullanır.

Tüneli durdurmanın argümanları
-S /tmp/ssh_tunnel_%h.sock:: Bu açık olmalı. Ancak bir -M yayınlamadığımızdan, ssh zaten orada bulunan sokete bağlanmalı ve kendisine bir şey yapmak yerine ne yapması gerektiğini söylemelidir.
-O exit: Bu bir parçası -S. Soketten çıkan ssh'nin çıkmasını söyledik. Hala burada gereklidir. Mutlak bir soket yolu belirtmiş olsanız bile , dosya adında kullanmadan , ssh uzak bir ana bilgisayarın belirtilmesini isteyecektir. Bu yüzden tartışmaya girdim . Eğer ssh evsahibini isteyecekse ve işlerin düzenli kalmasını sağlayabilir.
$SSH_HOST%h%h


5

Bu tür tünel ip adres bilgilerinizi değiştirmez. Tek yapmanız gereken, bilgisayarınıza 9999 numaralı bağlantı noktasını açmasını ve ssh bağlantınız üzerinden bu bağlantı noktasına uzaktaki makineye (tim @ server) bağlantıları iletmektir. Bağlantının açık olduğunu test etmenin en kolay yolu, iletimin oluşturulduğu bağlantı noktasına telnet yapmaktır (örneğin 9999’da):

$ telnet localhost 9999
Sunucu çalışıyor ...
Sunucuya bağlı.
Çıkış karakteri '^]'.

"Sunucuya bağlı." mesaj, bu tünelin olduğu anlamına gelir. Eğer, bunun yerine: "Uzak ana bilgisayara bağlanılamıyor: Bağlantı reddedildi" tüneliniz çalışmıyor.

İkinci sorunuza gelince, tarayıcınız için, tarayıcınız siz söylemediğiniz sürece tüneli kullanmayacaktır. Tarayıcı ağ ayarlarında proxy ayarlarını yapılandırabilir ve localhost: 9999'u bir çorap5 proxy olarak belirtebilirsiniz; ardından web bağlantılarınız ssh tünelini kullanmalı ve sunucunun IP adresinden gelmiş gibi görünmelidir.


+1 Teşekkürler! (1) LAN’daki bir yazıcıya yazdırdığımda 9999 numaralı bağlantı noktasına gidip, tüneli nasıl kullanacağını nereden biliyor? Başka bir şey değil mi? (2) IP adres bilgilerimi değiştiren tüneller var mı?
Tim

Muhtemelen, bu yazıcı belirli bir IP adresine ve bağlantı noktasına yazdırmak üzere yapılandırılmıştır. Bu, yazıcınızın nasıl kurulduğuna bağlıdır. Genellikle, bir yazıcı tanımlarken her ikisini de belirleyebilirsiniz. Evet, kendileriyle ilgili kendi IP bilgilerine sahip olacak tüneller vardır. Genelde bunlar için kendi IP adreslerine bağlı olan ayrı bir tun / tap en.wikipedia.org/wiki/TUN/TAP arayüzü oluşturursunuz ve bu adresten çıkan tüm trafik farklı bir ağdan gelir. .
gabe.

Teşekkürler! Firefox’un tercihlerinde, gelişmiş -> bağlantı -> ayarlarında, manuel proxy yapılandırmasını seçiyorum ve HTTP Proxy için "localhost" ve bağlantı noktası için "9999" yazdım. Bundan sonra Firefox'ta hiçbir web sitesine bağlanamıyorum. Nedenini merak ediyorum?
Tim

@Tim biraz kafa karıştırıcı ... ayarlamak için doğru şey: SOCKS Host, HTTP Proxy değil. Bunu ilk denediğimde de aynı sorunu yaşadım.
gabe.

1

Benim durumumda (Ubuntu 14.10’da Google Chrome), harici adresim en azından tarayıcıda değişiyor. Sadece google "IP adresim nedir?" Proxy bağlantısı olan ve olmayan.

Ayrıca, proxy'yi ayarladıktan sonra, tüneli yok etmeye çalışın ve hala trafik alabiliyor musunuz bakın. Bunu yaptığımda, chrome "Proxy sunucusuna bağlanılamıyor" hatası veriyor.

Başka bir yol: uzak ana bilgisayara tünel yaptıktan sonra, yeni bir ssh oturumu oluşturun ve çalıştırın tcpdump -A dst port 80. Ardından bazı sayfalara göz atın ve terminalde ilgili trafiği görmelisiniz.

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.