Bu ssh tüneli nasıl kapatılır? [kapalı]


101

Bu yazıda anlatıldığı gibi bir ssh tüneli açtım: Zend_Db: SSH tüneli üzerinden bir MySQL veritabanına nasıl bağlanılır?

Ama şimdi gerçekte ne yaptığımı bilmiyorum. Bu komut sunucudaki herhangi bir şeyi etkiler mi? Ve bu tüneli nasıl kapatırım çünkü artık yerel mysql'imi düzgün kullanamıyorum.

OSX Lion kullanıyorum ve sunucu Ubuntu 11.10 üzerinde çalışıyor.

Yanıtlar:


246

Bu komutu çalıştırdığınızı varsayarsak: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Nbağladığınız gönderide açıklandığı gibi.

Komutun bir dökümü:

  1. ssh: bu oldukça açıklayıcı. Çağırır ssh.
  2. -f: (Sayfadan man ssh)

    Komut yürütmeden hemen önce ssh'nin arka plana gitmesini ister. Bu, ssh parolaları veya parolaları soracaksa, ancak kullanıcı bunu arka planda istiyorsa kullanışlıdır.

    Esasen, sshbağlantı kurmak için herhangi bir şifre girdikten sonra arka plana gönderin ; localhostoturum açmak yerine , kabuk istemini size geri verir remote-host.

  3. user@mysql-server.com: oturum açmak istediğiniz uzak sunucu.
  4. -L 3306:mysql-server.com:3306: Bu ilginç kısım. -L( man sshsayfadan):

    [bind_address:] bağlantı noktası: ana bilgisayar: ana bilgisayar bağlantı noktası Yerel (istemci) ana bilgisayar üzerinde belirtilen bağlantı noktasının, uzak taraftaki belirli ana bilgisayara ve bağlantı noktasına iletileceğini belirtir.

    Yani -L 3306:mysql-server.com:3306bağlayan yerel port 3306için uzak port 3306 ana bilgisayarda mysql-server.com.

    Yerel bağlantı noktasına bağlandığınızda 3306, bağlantı güvenli kanal üzerinden adresine iletilir mysql-server.com. Uzak ana , mysql-server.comardından bağlanırmysql-server.com bağlantı noktasında 3306.

  5. -N: bir komutu çalıştırmayın. Bu, "sadece portları iletmek" için kullanışlıdır (man sayfasını alıntılayarak).

Bu komut sunucudaki herhangi bir şeyi etkiler mi?

Evet, 3306 numaralı bağlantı noktasında localhost ile mysql-server.com arasında bir bağlantı kurar .

Ve bu tüneli nasıl kapatırım ...

Kullandıysanız -f, sshaçtığınız işlemin arka planda başladığını fark edeceksiniz . O çalıştırmaktır kapatma güzel yöntemi ps aux | grep 3306bulmak pidait ssh -f ... -L 3306:mysql-server.com:3306 -Nve kill <pid>. (Ya da belki kill -9 <pid>; killişe yarayıp yaramadığını unutuyorum ). Yani güzel yararı vardır değil diğer tüm öldürme sshbağlantıları; Birden fazla varsa, onları yeniden kurmak hafif bir ... acı olabilir.

... çünkü artık yerel mysql'imi düzgün kullanamıyorum.

Bunun nedeni, yerel mysql süreci etkili bir şekilde "yakalamanız" ve ona bağlanmaya çalışan trafiği uzaktaki mysql sürece iletmiş olmanızdır . Çok daha hoş bir çözüm , bağlantı noktası ilerisinde 3306 yerel bağlantı noktasını kullanmamak olacaktır . 33060 gibi kullanılmayan bir şey kullanın. (Daha yüksek sayılar genellikle daha az kullanılır; bunun gibi bir kombinasyonu bağlantı noktasını iletmek oldukça yaygındır: "2525-> 25", "8080-> 80", "33060-> 3306" veya benzer. Hatırlamayı biraz daha kolaylaştırır).

Yani, kullandıysanız ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N, Zend mysql'e bağlan işlevinizi localhostbağlantı noktasına 33060bağlanacak olan mysql-server.combağlantı noktasına yönlendirirsiniz 3306. Açıkçası yine de localhoston port'a bağlanabilirsiniz 3306, böylece yerel mysqlsunucuyu yine de kullanabilirsiniz .


5
Bir süredir okuduğum en iyi açıklama. Bu, örneğin R gibi yerel olarak kurulmuş ortamlardan uzak bir veritabanına erişirken çok kullanışlıdır. Genel / özel anahtar kimlik doğrulamasıyla iyi çalışır. Şifrelerle değil çünkü şifreleri şifrelemenin bir yolunu bulamadım.
Matt Bannert

Kapsamlı açıklama nedeniyle bu cevabı en iyi olarak kabul etmek.
Jacob

Güzel cevap! Bu arada, -9için gerekli değildir killsüreci hala ;-) iyi çalışıyor göz önünde bulundurarak
Lucio Paiva

46

Bu, terminalden açtığınız tüm ssh oturumlarını öldürecektir.

sudo killall ssh

'Eşleşen işlem bulunamadı' diyor.
Jacob

Öyle görünüyor. Mysql de iyi çalıştı, ancak Apache şikayet etmeye başladı. Yeniden başlatma yaptım ve her şey beklendiği gibi çalışıyor. Sanırım sorun çözüldü :)
Jacob

5
Peki, bu bir üretim ortamı ise bunu yapmak istemezsiniz ... diğer tüm yöneticileri
atarsınız

13
Koşmak killall ssholdukça umursamaz bir komuttur. ps aux | grep sshSsh tünel sürecinizin belirli işlem kimliğini keşfetmek için işlem listenizi (örn . Yukarıda @simont tarafından önerildiği şekilde) aramanızı öneririm. O zaman özellikle pid'i öldürebilirsiniz.
Ben

Hepsinin ölmesini istemeyecek kadar büyük bir şans var.
wobbily_col

23

Not: yorumlar kod bloklarını desteklemediğinden yanıt olarak ekleme.

Bence, KULLANMAMAK -fve bunun yerine süreci normal olarak arka planda tutmak daha iyidir &. Bu size öldürmeniz gereken tam pid'i verecektir :

ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
... do yer stuff... launch mysql workbench whatever
echo "killing ssh tunnel $pid"
kill $pid

Ya da daha iyisi, bunu bir sarmalayıcı komut dosyası olarak oluşturun:

# backend-tunnel <your cmd line, possibly 'bash'>
ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
"$@"
echo "killing ssh tunnel $pid"
kill $pid

backend-tunnel mysql-workbench

backend-tunnel bash


12
Kullanımı -f, ssharka plana itmenin aksine, terminal oturumu kapatıldığında bile oturumun devam etmesini sağlar . Kapma pidkullanarak ps aux | grep ssh | grep <LOCAL-PORT>oldukça basittir.
simont

1
@simont, arkaplan işinden döndürülen açık pid'i kullanmak, nasıl arka plan yaptığınıza bakılmaksızın daha güvenlidir. eğer birden fazla ssh süreciniz varsa kötü zaman
aaron

-fAyrıca kullanmak , gerekirse yerel kullanıcıdan oturum açma parolasını sorma avantajına da sahiptir. Eğer kullanırsanız &, işlemi ön plana çıkarmadıkça (örneğin kullanarak fg) bu komut kullanıcı tarafından görülmez .
Bdoserror


4
<LOCAL-PORT>, 'ssh' metnini de içeren (başka bir ssh veya sshd işlemi veya adında 'ssh' olan bir dosyayı düzenleme gibi) bir işlemin pid'inde ilk kez ortaya çıktığında, bunun yaklaşım, basit senaryolarda uygun olsa da kurşun geçirmez değildir
aaron
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.