Vraag Hoe kan ik ssh uitbreken als het wordt vergrendeld?


Ik sta regelmatig thuis in mijn doos van school, maar meestal wanneer ik van lessen wissel en mijn computer wordt onderbroken, zal de pijp worden verbroken. Echter, SSH sluit eenvoudigweg op - Ctrl+c, Ctrl+z en Ctrl+d hebben geen effect.

Het is vervelend om mijn terminal opnieuw te moeten opstarten en nog vervelender om een ​​nieuw schermvenster te moeten sluiten en opnieuw te maken.

Dus mijn vraag, is er een eenvoudige manier om ssh goed te laten sterven (d.w.z. wanneer de pijp faalt "normaal" zal hij stoppen met een bericht over een gebroken pijp)? Of moet ik uitvinden wat de PID is en deze handmatig doden?


343
2018-03-11 16:22


oorsprong


Als ik werd losgekoppeld met een actieve SSH-sessie, bevriest het. Ik dood het gewoon en begin een nieuwe sessie. Er gaat geen informatie verloren omdat ik het GNU-scherm gebruik. - Lekensteyn
Ik ook - het scherm is het beste. Maar het is nog steeds vervelend om dat te moeten doen screen -x : P - Wayne Werner
[mosh] (mosh.mit.edu) is een goed alternatief om dit probleem te voorkomen. Het "blijft verbonden", zelfs met intermitterende internetconnectiviteit. - jaynp
@jaynp Het nadeel van mij met mosh (sinds twee minuten geleden) is dat ik niet weet hoe ik het moet loskoppelen. Ik gebruik een tmux + irssi-sessie op een externe host (als een IRC-bouncer, een soort van) en ik wil soms ontkoppelen (terwijl de tmux + irssi actief blijven) en dat deed ik met <enter> + ~ +. SSH gebruiken maar werkt niet met mosh. - Pavel Šimerda


antwoorden:


Normale toetsen worden doorgestuurd via de ssh sessie, dus geen van die zal werken. Gebruik in plaats daarvan de escape-sequences. Om de huidige sessieslag vervolgens te doden Voer ↵ in, ~, ..

Meer van deze escape-sequences kunnen worden vermeld met Voer ↵ in, ~, ?:

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

U kunt de lijst met Escape-reeksen sluiten door op te raken invoeren.

Merk op dat omdat slaan ~~ oorzaken ssh om de ~ in plaats van het te onderscheppen, kunt u iets aanpakken N genesteld ssh verbindingen door te raken ~  N tijden. (Dit geldt alleen voor ~s die direct volgen op een invoeren.) Dat wil zeggen dat invoeren~~~~~. beëindigt een ssh sessie 5 lagen diep en houdt de andere 4 intact.


478
2018-03-11 17:18



Voor toetsenbordindelingen waar ~ is een dode sleutel, de volgorde van toetsen is Enter  ~  Space  .. - Søren Løvborg
ik heb toegevoegd meer van de escape sequences die nuttig kunnen zijn. :) - gertvdijk
Merk op dat je de regel moet verwijderen EscapeChar ~ in /etc/ssh/ssh_config (of ~/.ssh/ssh_config als je dat liever hebt). - Aditya M P
@Hitechcomputergeek Enter  ~  ~  . Sinds ~  ~ stuurt een letterlijke ~ via uw SSH-sessie ontvangt de tweede SSH-sessie het als een enkele tilde en interpreteert het . als onderdeel van de ontsnapping. Als u naar de 5e geneste SSH-sessie wilt verzenden, gebruikt u 5 tildes in uw escape-reeks. - Score_Under
leven veranderen;) - artm


U kunt ook het niveau van de toepassing instellen -keepalives voor SSH naar voorkomen het bevriest problemen met de verbinding. Mijn ~/.ssh/config bevat dit:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Dit zorgt ervoor dat de ssh-client elke 15 seconden ophoudniveau-keep-alives verzendt. Wanneer drie van hen opeenvolgend falen (de standaardwaarde van ServerAliveCountMax), beschouwt de klant de verbinding als opgehangen en sluit deze.

In tegenstelling tot de andere optie TCPKeepAlive, dit wordt gecontroleerd binnen het gecodeerde kanaal en is niet spoofbaar.


Opgemerkt wordt dat die keep-alives ook helpen om, uhm, te houden lang stationair draaien verbindingen levend, d.w.z. voorkomen dat u dat doet -Half gesloten tcp-sessies blijven urenlang onaangeroerd.

Ik raad ten zeerste aan om deze functie in te schakelen als u dit regelmatig tegenkomt, maar u moet ook weten welke beveiligingsrisico's dit kan opleggen. EEN bekend-plaintext-aanval kan gemakkelijker worden als de aanvaller het interval en de inhoud van een inactieve verbinding kent. Dit kan de reden zijn waarom het standaard niet is ingeschakeld.


51
2018-03-11 18:51



Veiligheidsredenen. Je kunt gaan drinken en ssh sessio geopend laten en je lab-partner met wie je de afgelopen 20 jaar hebt gewerkt, kan je sessie gebruiken om de server te kapen en te vernietigen ... terwijl je dronk tijdens je pauze van tien minuten. - Luis Alvarado♦
@ CYREX, eh? En hoe kan standaard uitschakelen optie voorkomen dat u oneerlijke lab-partners heeft? %) - ulidtko
@ulidtko: Is er een reden om niet in te stellen? ServerAliveInterval naar 1 zodat een verloren verbinding onmiddellijk wordt gedetecteerd? - krlmlr
ik heb verbeterde de post met mijn kennis erover, samen met andere 'fixes'. Ik denk dat het dat niet is de antwoord op de vraag, omdat het meer gaat om het voorkomen dan om een ​​reeds verbroken probleem te verhelpen. - gertvdijk
@gertvdijk: Bedankt. Voor mij werkt het zelfs zonder de Host lijn. Ook: "Moderne coderingen zoals Advanced Encryption Standard zijn momenteel niet gevoelig voor bekende plaintext-aanvallen." (via de link die je hebt toegevoegd) ... - krlmlr


Zoals opgemerkt in het antwoord van geekosaurus, de escape-reeks ~. zal de verbinding beëindigen.

De volledige lijst met escape-sequences en wat ze doen kan worden weergegeven door te typen ~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

39
2018-03-15 06:39



Hoe sluit ik de lijst met escape-sequences? - kristianp
Na het afdrukken van de lijst met escape-sequenties bent u niet klaar om de volgende te accepteren. - Tejas Kale