Então, eu estava rodando apt-get upgrade
em um servidor quando o roteador decidiu que já fazia muito tempo desde a última vez que fiquei com raiva: ele perdeu toda a conexão. O moral da história é usar screen
muito quando você está em um roteador de vagabundo.
De qualquer forma, entrei novamente e descobri no htop que o processo ainda estava suspenso, esperando o upgrade do Y / n (ainda não o havia acertado, por sorte). Existe alguma maneira de me reconectar a uma sessão que foi interrompida? Acabei matando, já que não estava no meio do gerenciamento de pacotes, mas seria ótimo saber para referência futura.
apt-get
processo ainda estivesse em execução. Deveria ter morrido junto com toda a cadeia do processo até o SSH. Notei quedo-dist-upgrade
começa automaticamente em uma sessãoscreen
/byobu
: talvez em algumas circunstâncias,apt-get
faça o mesmo?Respostas:
A resposta para sua pergunta correta é: você não pode . Eu acho que o principal problema é que os procedimentos de autenticação estarão fora de sincronia. Simplesmente não funciona assim.
Como você notou, a solução é usar a tela sempre que possível (a propósito, o tmux é uma alternativa à tela).
fonte
byobu
is a nice, easier to use front end toscreen
(ortmux
) - definitely worth a look (:Para executar processos duradouros, eu uso screen ou byobu se você deseja uma interface mais amigável.
Para tela, você pode usar:
Isso executará [program] e seus [args] dentro de uma sessão de tela . Após o término do programa, a sessão é fechada automaticamente. Se você deseja manter a sessão após a execução do programa, basta executar a tela sem argumentos e um novo prompt aparecerá dentro da sessão. CTRL + A + D desanexa o terminal da sessão atual.
Para se reconectar a uma sessão anterior:
Se houver apenas uma sessão aberta, ela será reconectada imediatamente. Se várias sessões estiverem em andamento, ele perguntará a qual você deseja anexar. Se você souber o nome da sessão, basta adicioná-lo como argumento a esta linha de comando.
Byobu é uma boa melhoria. É baseado na tela , mas fornece uma barra na parte inferior que mostra todas as sessões atuais como guias e fornece atalhos mais fáceis para serem movidos por elas. Você pode:
PALAVRA DO CONSELHO : evite deixar uma sessão aberta com a raiz do usuário . Se alguém obtiver acesso ao seu terminal (local ou remotamente), poderá facilmente se reconectar a uma sessão em andamento e usar seu sistema como root. Se necessário, é melhor iniciar uma sessão usando as linhas de comando comuns do usuário e do sudo , conforme necessário.
fonte
Embora não seja possível reconectar a uma sessão SSH quebrada, é possível reparar novamente o processo em execução no SSH - funcionalmente equivalente ao que você deseja.
Instruções
No seu caso, você assumiria o
apt-get
processo a ser controlado a partir de uma nova sessão SSH,screen
sessão ou similar. O meu favorito para isso é oreptyr
comando:Então, com o pid que você encontrou para o seu processo:
Ou, se isso não funcionar, tente:
Após esse estágio, toda a entrada do teclado vai para o programa que você assumiu. Infelizmente, você não verá a saída antiga da sessão SSH, como a
apt-get
saída solicitando sua confirmação.Explicações
Existem várias outras ferramentas que basicamente funcionam da mesma forma
reptyr
(ou seja, viaptrace
anexo de depuração). Consulte as seguintes perguntas e respostas onde elas são discutidas:Nas instruções acima, ele
reptyr 10626
usa optrace
anexo de depuração enquanto osudo reptyr -T 10626
comando usa o roubo de TTY e é preferível ( detalhes ).Finalmente, a razão pela qual você não pode assumir uma sessão SSH dessa maneira é porque um
sshd
processo não é controlado por um terminal host, mas fornece a parte escrava de um terminal - umpts
dispositivo - enquanto a parte principal que o controla reside no máquina cliente, aqui com uma sessão SSH dividida no meio. Quando você força a assumir essesshd
processoreptyr -s <pid>
, a entrada do teclado vai para esse processo, não para o processo filho ativo. Portanto, um "Ctrl + Z" simplesmente elimina issosshd
.fonte
Eu estava fazendo
do-dist-upgrade
via ssh de um laptop que entrou em suspensão, portantoBroken pipe
. Ao voltar para a máquina, vi os processos relacionados à atualização ainda em execução, entre os quais umawhiptail
solicitação de entrada (qual gerenciador de exibição escolher) e, relevante, uma propriedade de raizSCREEN
. Eu era capaz de fazersudo su -
escreen -r
me anexar à sessão e, eis que eu tenho o diálogo whiptail à minha frente, capaz de receber sugestões. Consegui retomar a atualização sem problemas.Nota: esta foi uma atualização do Ubuntu 14.04 para 16.04.
fonte