GNU/Linux >> Znalost Linux >  >> Linux

Obsluha Ctrl-c v relaci Ssh?

Když zahájím relaci SSH, která provede dlouhotrvající příkaz, co se stane s Ctrl +C (SIGINT) zpracování?

Vidím, že relace SSH je uzavřena, ale nejsem si jistý, kdo dostane SIGINT jako první:je to…

  1. vzdálený dlouhotrvající příkaz? to znamená, (a) je zavolán obslužný program signálu ve vzdáleném příkazu a zastaví vzdálený příkaz, (b) shell, který jej vytvořil, zjistí, že příkaz skončil, a také se zastaví (c) vzdálený sshd detekuje zastavení shellu, tak to uzavře spojení

    nebo

  2. místní ssh přijme signál a uzavře spojení.

Myslím, že (1) se děje, ale chci se ujistit.

Také si nejsem jistý, co se v tomto případě stane se zpracováním SIGINTů v shellu. Například, když …

ssh remote 'while true ; do sleep 1 ; date ; done'

a Ctrl +C , pak se vzdálené připojení přeruší. Existuje způsob, jak spustit vzdálený příkaz pod shellem, který zůstane naživu po Ctrl +C ? To znamená, že v tomto případě zastavit smyčku a umožnit mi pokračovat v práci na vzdáleném shellu?

Přijatá odpověď:

ssh lze vyvolat několika různými způsoby, z nichž každý má za následek mírně odlišné zacházení se signály iniciovanými terminálem, jako je Ctrl-C .

  • ssh remotehost spustí interaktivní relaci na remotehost . Na straně klienta ssh se pokusí nastavit tty používané stdin na „raw“ režim a sshd na vzdáleném hostiteli přidělí pseudo-tty a spustí váš shell jako přihlašovací shell (např. -bash ).

    Nastavení raw režimu znamená, že znaky, které by normálně vysílaly signály (jako Ctrl-C a Ctrl- ) jsou místo toho pouze vloženy do vstupního proudu. ssh odešle takové znaky tak, jak jsou, do vzdáleného hostitele, kde pravděpodobně pošlou SIGINT nebo SIGQUIT a obvykle ukončí jakýkoli příkaz a vrátí vás do shellu na vzdáleném hostiteli. Ssh připojení zůstane živé, dokud bude živý vzdálený shell.

  • ssh -t remotehost command args ... spustí interaktivní relaci na remotehost , stejně jako výše, s výjimkou na vzdálené straně, your_shell -c "command args ..." bude spuštěn. Stejně jako výše, pokud zadáte Ctrl-C , bude odesláno vzdálenému hostiteli, kde příkaz pravděpodobně obdrží SIGINT a okamžitě se ukončí, a poté se vzdálený shell ukončí. Vzdálený sshd poté uzavře připojení a ssh hlásí Connection to remotehost closed.

  • ssh remotehost command args ... spustí neinteraktivní relaci na remotehost . Na straně klienta ssh nebude nastavte tty na nezpracovaný režim (dobře, kromě čtení hesla nebo přístupové fráze). Pokud zadáte Ctrl-C , ssh bude odesláno SIGINT a bude okamžitě ukončeno, aniž by bylo nutné vydat Connection to remotehost closed zprávu.

    your_shell -c "command args ..." procesy pravděpodobně zůstanou spuštěné na vzdáleném hostiteli . Buď se samy ukončí, nebo se jeden proces pokusí zapsat data do nyní zavřeného soketu ssh, což způsobí, že do něj bude odeslán (obvykle) fatální signál SIGPIPE.

Související:Jak vyprázdnit mezipaměť Magento 1.9.x pomocí SSH?
Linux
  1. Vpn tunel pro vzdálený přístup SSH

  2. Spustí 1 ze vzdálené relace (přes VPN) ssh ssh připojení

  3. SSH připojení přes reverzní (vzdálený) SSH tunel

  1. 5 způsobů, jak udržet vzdálené relace a procesy SSH spuštěné po odpojení

  2. Ssh – protokolování pokusů o přístup Ssh?

  3. Znovu připojit ke ztracené relaci X11?

  1. Povolit vzdálený přístup Ssh?

  2. Jak odeslat data do místní schránky ze vzdálené relace SSH

  3. Předávání proměnných ve vzdáleném příkazu ssh