Normalmente, as sessões de terminal SSH ficam suspensas se ainda houver conexões em segundo plano ainda abertas. Por conexões de fundo, quero dizer coisas como:
- encaminhamento de janela X11
- STDOUT e STDERR
Dê uma olhada nas conexões que ainda estão ativas na sua sessão SSH suspensa digitando ~#
em seu terminal SSH suspenso.
Pode ser que o seu script esteja abrindo sessões que você não percebeu. Ou as configurações do terminal da sua máquina remota, como .profile
(ou .bashrc
, etc.), podem conter algo que estabeleça uma sessão. Boa sorte caçando!
A propósito, algumas das outras seqüências de escape oferecidas pelos clientes OpenSSH também podem ser úteis:
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.)
Uma outra coisa, se você quiser que seu SSH apenas execute seus comandos e saia imediatamente - ou seja, você não deseja uma sessão de terminal remoto - você pode usar a opção -f
para ssh
. Isso forçará a conexão SSH a ser um trabalho em segundo plano.