Czy istnieje sposób na wycofanie się ze wszystkich połączeń SSH i zamknięcie PuTTY w „jednym ujęciu”? Pracuję w systemie Windows 7 i używam PuTTY do SSH do różnych hostów Linux.

Przykład sposobu, w jaki pracuję:

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. 

Jak powyżej, czy jest jakiś sposób, aby przejść od host8 do zamknięcia PuTTY w jednym ujęciu? Czasami znajduję się na głębokości do 5 lub 10 hostów. Zdaję sobie sprawę, że mogę kliknąć X, aby zamknąć okno PuTTY, ale lubię się upewnić, że moje połączenia SSH zostaną poprawnie zamknięte, używając polecenia exit. Zdaję sobie również sprawę, że proszę o wskazówki, jak zwiększyć lenistwo. Zapiszę to po prostu jako „jak mogę być bardziej efektywny”.

Komentarze

  • Nie bezpośrednio o co pytasz, ale co powiesz na wielokrotne naciśnięcie ctrl+d?
  • @UlrichDangel Nigdy wcześniej tego nie używałem, ale także szybki sposób na szybkie wycofanie się z połączeń.
  • Czy naprawdę zagnieżdżasz sesje ssh na głębokości od 5 do 10 poziomów? Czy zdajesz sobie sprawę, że ' tworzy zawiły tunel, który odbija wszystkie pakiety w sesji ssh przez wszystkie te hosty? Czy możesz rozwiązać problem, po prostu nie zagnieżdżając sesji ssh?
  • @ jw013 Nie, nie zdawałem sobie z tego sprawy, ale ma to sens. Szczerze mówiąc, 5–10 poziomów to przesada, ale starałem się zilustrować swoje pytanie „, jak za jednym zamachem wyjść z Putty. ”

Odpowiedź

Spróbuj użyć ssh sekwencja zmiany znaczenia zakończenia połączenia.

W sesji ssh wprowadź ~. (kropka tyldy). Nie zobaczysz znaków podczas ich wpisywania, ale sesja zostanie natychmiast zakończona.

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

From 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). 

Komentarze

  • Całkiem fajnie! Dowolny sposób na umieszczenie ~. do aliasu lub funkcji? Wystarczy, aby nadać mu łatwą do zapamiętania nazwę, taką jak exitall. Teraz ' pytam za dużo :). Próbowałem kilku rzeczy w ~/.bashrc, ale otrzymuję -bash: ~.: command not found. Przypuszczam, że bash widzi to jako ciąg, a nie sekwencja zmiany znaczenia pochodząca bezpośrednio z klawiatury.
  • Podoba mi się również rozwiązanie ctrl+d, ale to odpowiada bardziej bezpośrednio na moje pytanie. Dziękuję wszystkim.
  • @Banjer bash nigdy nie widzi ~., ' jest obsługiwanych przez ssh .
  • @Gilles rozumiem, ma sens.
  • A ' nie ma gwarancji ee, że PuTTY też to robi. Klient CLI ssh potrzebuje tej techniki, ponieważ ' jest CLI. PuTTY to aplikacja z graficznym interfejsem użytkownika i istnieją znacznie bardziej przyjazne dla użytkownika sposoby robienia tego w interfejsie GUI.

Odpowiedź

Po prostu naciśnij Ctrl D , a zostaniesz tam wylogowany, aby przytrzymać Ctrl i nacisnąć „d”, aż okno zniknie.

Komentarze

  • Niestety, to nie ' nie działa uniwersalnie. Każda sesja z uruchomionym edytorem lub innym narzędziem pełnoekranowym prawdopodobnie zignoruje EOT. I nawet bash zignoruje go w środku wiersza poleceń. Wypróbuj sam: wpisz pojedynczą literę i spróbuj Ctrl-D.
  • Co robi Ctrl + D, to znaczy, czy istnieje bezpiecznie, czy po prostu zabija proces?
  • Bezpiecznie wychodzi. Jest to skrót powłoki, który jest taki sam, jak wpisanie ' exit ' i naciśnięcie klawisza Enter.
  • Właściwie moje ( windows git bash & ubuntu bash) problem logout.
  • tak, myślę, że exit wywołuje również wylogowanie jako ssh połączenia zwykle nie są sesjami logowania.

Odpowiedź

Po prostu zamknij PuTTY. (domyślnie Alt + F4 IIRC.)

Odpowiedź

Innym sposobem jest utworzenie function dla ssh:

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

Niestety zawsze zamknie połączenie i wyloguje się z konsoli po zakończeniu pracy na zdalnym systemie.

Pamiętaj, że musisz mieć taką funkcję na wszystkich swoich serwerach, w przeciwnym razie ten hack nie zadziała . Przy okazji, zawsze możesz umieścić funkcję w ~ / .bashrc lub ~ /. Whatthing_shell_you_use_rc.

Wygląda trochę brudno w porównaniu do sposobu uthera.

Komentarze

  • function nie jest POSIX – wystarczy usunąć słowo kluczowe i zacytować $@ poprawnie, inaczej argumenty zostaną przekazane po podziale na słowa (źle).

Odpowiedź

Lub możesz użyć exec, aby zastąpić proces powłoki z ssh podczas przeskakiwania do innego hosta:

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. 

5 poziomów głębokości nie jest ładny, ponieważ ruch przejdzie przez wszystkie inne serwery. Z tego powodu nie polecam po prostu zabijania PuTTY lub ssh (~.), Ponieważ (w zależności od tego, co zrobisz) może to spowodować osierocone procesy na serwerach.

Lepiej spróbować być mniej. leniwy ”. Kliknij prawym przyciskiem myszy pasek tytułu puttys, aby szybko otworzyć nową sesję. Jeśli masz serwer„ domyślny ”i zaakceptujesz 1 skok z niego, funkcja„ Duplikuj sesję ”jest bardzo przydatna. Szczególnie przy uwierzytelnianiu za pomocą klucza publicznego.

Odpowiedź

Jeśli nie masz nic przeciwko zrobieniu małego skryptu, możesz to zrobić.

Skrypt: myssh .sh

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

Zadzwoń za pomocą polecenia z kropką:

$ . myssh [email protected] 

Jeśli chcesz wyjście z jednego poziomu:

$ exit 

Jeśli chcesz wyjść z wszystkich:

$ exit 5 

Komentarze

  • Oczywiście musiałbyś skopiować to na każdy komputer, z którego kiedykolwiek ssh. Poza tym, czy nie ' nie byłoby łatwiej po prostu zdefiniować funkcję powłoki o nazwie ssh? Pozwoliłoby to uniknąć poprzedzającego okresu itp.

Odpowiedź

Wpisanie wylogowania w oknie terminala kitu robi to za ja:

richard@forevermore:~ > logout 

Zamyka połączenie ssh i zamyka aplikację Putty.

Komentarze

  • Uważam, że nie ' nie przeczytałeś poprawnie pytania. OP robi ssh host1, a następnie z host1 robi ssh host8. W tym momencie logout zrobiłoby to samo, co polecenie exit, które już znają – wyjdź z host8 i włóż je z powrotem do host1.
  • OK, rozumiem.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *