tek bir komutla tüm SSH bağlantılarından çıkın ve PuTTY'yi kapatın


19

Tüm SSH bağlantılarından çıkmanın ve "tek seferde" PuTTY'yi kapatmanın bir yolu var mı ? Windows 7'de çalışıyorum ve çeşitli Linux sunucularına SSH'den PuTTY kullanıyorum.

Kendimi çalışırken bulmamın bir örneği:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

Yukarıdakilere göre, host8'den PuTTY'yi tek seferde kapatmak için herhangi bir yol var mı? Bazen kendimi 5 veya 10 ana bilgisayar derinliğine kadar bulurum. PuTTY penceresini kapatmak için X'i tıklayabileceğimin farkındayım, ancak çıkış komutunu kullanarak SSH bağlantılarımın düzgün bir şekilde kapatıldığından emin olmak istiyorum. Ayrıca tembelliğin nasıl artırılacağı konusunda ipuçları istediğimin farkındayım. Sadece "nasıl daha verimli olabilirim" diye yazacağım.


6
Doğrudan sorduğunuz şey değil, ctrl+dbirden çok kez basmaya ne dersiniz ?
Ulrich Dangel

@UlrichDangel Daha önce hiç kullanmadım, ama aynı zamanda bağlantılardan hızlı bir şekilde çıkmanın hızlı bir yolu.
Banjer

2
Gerçekten ssh oturumları 5 ila 10 seviyeleri derin iç içe mi? Bunun, ssh oturumunuzdaki tüm paketleri, tüm bu ana bilgisayarlar üzerinden sektiren kıvrımlı bir tünel oluşturduğunun farkında mısınız? Sadece ssh oturumlarını iç içe geçirmeyerek sorunu ortadan kaldırabilir misiniz?
jw013

@ jw013 Hayır, bunu fark etmedim, ama mantıklı. Dürüst olmak gerekirse, 5-10 seviyeleri bir abartıydı, ama "Putty'den temiz bir şekilde nasıl düştüğünü" düştüğüm bir soru üzerine göstermeye çalışıyordum.
Banjer

Yanıtlar:


29

sshBağlantı sonlandırma kaçış sırasını kullanmayı deneyin .

In sshoturumda girin ~.(nokta tilde). Karakterleri yazarken görmezsiniz, ancak oturum hemen sona erer.

$ ~.
$ Connection to me.myhost.com closed.  

itibaren man 1 ssh

The supported escapes (assuming the default ‘~’) are:
 ~.      Disconnect.
 ~^Z     Background ssh.
 ~#      List forwarded connections.
 ~&      Background ssh at logout when waiting for forwarded 
         connection / X11 sessions to terminate.
 ~?      Display a list of escape characters.
 ~B      Send a BREAK to the remote system (only useful for SSH protocol
         version 2 and if the peer supports it).
 ~C      Open command line.  Currently this allows the addition of port 
         forwardings using the -L, -R and -D options (see above). It also
         allows the cancellation of existing remote port-forwardings using 
         -KR[bind_address:]port.  !command allows the user to execute a 
         local command if the PermitLocalCommand option is enabled in
         ssh_config(5).  Basic help is available, using the -h option.
 ~R      Request rekeying of the connection (only useful for SSH protocol 
         version 2 and if the peer supports it).

Oldukça havalı! ~.Takma ad veya işlev koymak için herhangi bir yolu var mı? Sadece hatırlaması kolay bir isim vermek gibi exitall. Şimdi çok fazla şey istiyorum :). Birkaç şey denedim ~/.bashrcama alın -bash: ~.: command not found. Ben bash bunu bir dize olarak görür ve doğrudan klavyeden gelen bir kaçış dizisi olarak görür.
Banjer

ctrl+dÇözümü de seviyorum , ama bu sorumu daha doğrudan cevaplıyor. Hepinize teşekkürler.
Banjer

3
@ Banjer bash asla görmez ~., sshkendi başına halledilir .
Gilles 'SO- kötü olmayı bırak

@Gilles gotcha, mantıklı.
Banjer

PuTTY'nin de bunu yaptığının garantisi yok. CLI sshistemcisinin bu tekniğe ihtiyacı var çünkü CLI. PuTTY bir GUI uygulamasıdır ve bir GUI üzerinde bu şeyleri yapmanın çok daha kullanıcı dostu yolları vardır.
Alexios

12

Sadece basın CtrlDve ctrl tutmak için orada oturumunuzu kapatır ve pencere kaybolana kadar "d" tuşuna basın.


1
Ne yazık ki, bu evrensel olarak çalışmıyor. Bir düzenleyiciyi veya başka bir tam ekran aracını çalıştıran herhangi bir oturumun göz ardı edilmesi muhtemeldir EOT. Ve hatta bashbir komut satırının ortasında görmezden gelir. Kendiniz deneyin: tek bir harf yazın ve deneyin Ctrl-D.
Alexios

Ctrl + D ne anlama geliyor, yani güvenli bir şekilde var mı yoksa sadece süreci öldürüyor mu?
AMB

Güvenli bir şekilde çıkar. 'Exit' yazıp enter tuşuna basmakla aynı olan bir kabuk kısayolu.
Joe

Aslında benimki (windows git bash & ubuntu bash) sorunu a logout.
velis

Evet, ssh bağlantıları giriş oturumları olma eğiliminde olmadığından çıkışın oturumu kapattığını da düşünüyorum.
Joe


2

Başka bir yol yapmak functioniçin ssh:

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

Ne yazık ki, uzak sistemde çalışmayı bitirdikten sonra her zaman bağlantıyı kapatır ve konsoldan çıkış yapar.

Tüm sunucularınızda böyle bir işlev yapmanız gerektiğini unutmayın, aksi takdirde bu kesmek işe yaramaz. Btw işlevini her zaman ~ / .bashrc veya ~ / .whatever_shell_you_use_rc içine koyabilirsiniz.

Utrun yoluna kıyasla biraz kirli bir kesmek gibi görünüyor.


functionPOSIX değil - sadece anahtar kelimeyi kaldırın ve $@doğru şekilde alıntı yapmanız gerekir , aksi takdirde kelime bölme işleminden sonra argümanlarınız iletilir (kötü).
Chris Down

2

Veya başka bir ana bilgisayara atlarken execkabuk işleminizi değiştirmek için kullanabilirsiniz ssh:

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

Trafik diğer tüm sunuculardan geçeceğinden, 5 seviye derin değildir. Bu nedenle, PuTTY veya ssh (~.) 'I öldürmenizi önermiyorum, çünkü (ne yaptığınıza bağlı olarak) bu sunucularda yetimsiz işlemlere neden olabilir.

Denemek ve daha az "tembel" olmak daha iyi. Macun başlık çubuğuna sağ tıklamak yeni bir oturumun açılmasını hızlı hale getirir. "Varsayılan" bir sunucunuz varsa ve bundan 1 atlama kabul ediyorsanız, "Yinelenen Oturum" özelliği çok kullanışlıdır. Özellikle pubkey kimlik doğrulamasını kullanırken.


2

Biraz komut dosyası yazmanın bir sakıncası yoksa bunu yapabilirsiniz.

Komut dosyası: myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

Dot komutu ile arayın:

$ . myssh user@server.com

Bir seviye çıkmak istiyorsanız:

$ exit

Hepsinden çıkmak istiyorsanız:

$ exit 5

Tabii ki, ssh olabileceğiniz her bilgisayara kopyalamanız gerekir. Ayrıca, sadece ssh adlı bir kabuk işlevi tanımlamak daha kolay olmaz mıydı? Bu, önceki dönemden vb.
Kaçınacaktır

-1

Macun terminal penceresine oturumu kapatmak benim için yapar:

richard@forevermore:~ > logout

Ssh bağlantısını kapatır ve Macun Uygulamasından çıkar.


Soruyu doğru okumadığınıza inanıyorum. OP yapar ssh host1ve sonra da host1yapar ssh host8. Bu noktada a logout, exitzaten bildikleri komutla aynı şeyi yapar - çıkıp host8onları geri koyar host1.
G-Man

Tamam, görüyorum, kötüm.
Richard
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.