вийдіть із усіх з'єднань SSH в одній команді та закрийте PuTTY


19

Чи є спосіб відмовитися від усіх підключень SSH та закрити PuTTY "одним кадром"? Я працюю в Windows 7 і використовую PuTTY для SSH для різних хостів Linux.

Приклад того, як я працюю:

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.

Зверху, будь-яким способом дістатися з хоста8 до закриття PuTTY за один кадр? Іноді я опиняюся на глибині 5 або 10 господарів. Я усвідомлюю, що можу натиснути X, щоб закрити вікно PuTTY, але мені подобається переконатися, що мої SSH-з'єднання належним чином закриті за допомогою команди вихід. Я також усвідомлюю, що прошу поради, як посилити лінь. Я просто списаю це як "як я можу бути ефективнішим".


6
Не безпосередньо те, про що ви запитуєте, а як щодо того, щоб просто натиснути ctrl+dкілька разів?
Ульріх Дангел

@UlrichDangel Я ніколи цього не використовував, але також швидкий спосіб швидкого відключення зв’язків.
Банджер

2
Ви справді гніздите ssh-сеанси на глибині 5–10 рівнів? Ви усвідомлюєте, що створюється спільний тунель, який відскакує від усіх пакетів у вашому сеансі ssh через усі ці хости? Не могли б ви усунути проблему, просто не вкладаючи сеанси ssh?
jw013

@ jw013 Ні, я цього не усвідомлював, але має сенс. Чесно кажучи, 5-10 рівнів було перебільшенням, але я намагався проілюструвати моє питання про те, як "чисто вийти з Птіті одним махом".
Банджер

Відповіді:


29

Спробуйте скористатися sshпослідовністю відключення з'єднання.

У sshсеансі введіть ~.(tilde dot). Під час введення символів ви не побачите символів, але сеанс негайно припиниться.

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

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

Дуже здорово! Будь-який спосіб ввести ~.псевдонім або функцію? Просто для того, щоб легко запам'ятати ім’я на кшталт exitall. Зараз я дуже прошу способу :). Я спробував кілька речей, ~/.bashrcале отримай -bash: ~.: command not found. Я думаю, що bash сприймає це як рядок, а не послідовність евакуації, що надходить безпосередньо з клавіатури.
Банджер

Мені також подобається ctrl+dрішення, але це відповідає на моє запитання безпосередньо. Дякую всім.
Банджер

3
@Banjer bash ніколи не бачить ~., він справляється sshсам по собі.
Жил 'ТАК - перестань бути злим'

@Gilles gotcha, має сенс.
Банджер

І немає гарантії, що PuTTY також робить це. sshКлієнт CLI потребує цієї методики, оскільки це CLI. PuTTY - це програма GUI, і є набагато більш зручні способи зробити це на GUI.
Алексіос

12

Просто натисніть, CtrlDі він виведе вас там, щоб утримати ctrl, і натисніть "d", поки вікно не зникне.


1
На жаль, це не працює універсально. Будь-який сеанс із редактором чи іншим повноекранним інструментом, ймовірно, ігнорується EOT. І навіть bashбуде ігнорувати це посередині командного рядка. Спробуйте самі: введіть одну букву і спробуйте Ctrl-D.
Алексіос

Що робить Ctrl + D, я маю на увазі, чи безпечно він існує чи просто вбиває процес?
AMB

Це благополучно виходить. Це ярлик оболонки, який є тим же самим, як набрати 'вихід' та натиснути клавішу Enter.
Джо

Насправді моя (windows git bash & ubuntu bash) випуск logout.
velis

так, я вважаю, що вихід також викликає вихід із системи, оскільки ssh-з'єднання, як правило, не є сеансами входу.
Джо


2

Інший спосіб це зробити functionдля ssh:

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

На жаль, він також завжди закриє з'єднання та вихід із консолі після того, як ви закінчите роботу над віддаленою системою.

Зауважте, що вам потрібно зробити таку функцію на всіх своїх серверах, інакше цей злом не працюватиме. До речі, ви завжди можете помістити функцію в ~ / .bashrc або ~ / .wever_shell_you_use_rc.

Це виглядає трохи брудним злом у порівнянні з способом Утера.


functionне є POSIX - просто видаліть ключове слово, і вам потрібно буде цитувати його $@належним чином, або ваші аргументи будуть передані після розбиття слів (погано).
Кріс Даун

2

Або ви можете використати execдля заміни процесу оболонки на, 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.

5 рівнів глибиною не дуже, оскільки трафік проходитиме через усі інші сервери. Через це я не рекомендую просто вбивати PuTTY або ssh (~.), Оскільки (залежно від того, що ви робите) це може призвести до осиротілих процесів на серверах.

Краще спробувати і бути менш "ледачим". Клацніть правою кнопкою миші на заголовку puttys швидке відкриття нового сеансу. Якщо у вас є сервер "за замовчуванням" і ви приймаєте 1 стрибок з цього, функція "Дублікат сеансу" дуже корисна. Особливо, коли використовується автентифікація pubkey.


2

Якщо ви не проти зробити трохи сценаріїв, ви можете це зробити.

Сценарій: myssh.sh

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

Дзвінок за допомогою команди крапка:

$ . myssh user@server.com

Якщо ви хочете вийти з одного рівня:

$ exit

Якщо ви хочете вийти з усіх:

$ exit 5

Звичайно, ви б скопіювали його на будь-який комп'ютер, з якого ви можете коли-небудь сш. Крім того, чи не було б простіше просто визначити функцію оболонки під назвою ssh? Це дозволило б уникнути попереднього періоду тощо.
etherfish

-1

Введення виходу у вікно терміналу шпаклівки робить це для мене:

richard@forevermore:~ > logout

Замикає ssh-з'єднання та закриває програму Putty.


Я вважаю, що ви неправильно не прочитали питання. ОП робить ssh host1, а потім, з host1, робить ssh host8. У цей момент a logoutзробить те саме, що і exitкоманда, яку вони вже знають, - вийти з host8і повернути їх назад host1.
G-Man каже: "Відновіть Моніку"

Гаразд, бачу, моє погано.
Річард
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.