Gostaria de configurar o SSH e a tela para que um login sempre se reconecte a uma sessão de tela. Idealmente, essa sessão não seria encerrada, mas seria desconectada quando eu pressionasse Cd. Como isso pode ser alcançado? E que outras configurações úteis existem para facilitar minha vida SSH?
ssh
gnu-screen
Tobias Kienzler
fonte
fonte
Eu tenho o seguinte no meu .bash_profile nos meus servidores remotos:
Isso faz duas coisas: primeiro, configura uma função de shell para substituir o shell e levar adiante a conexão ssh-agent, depois chama a função após uma pausa por alguns segundos (caso você não queira que a tela inicie).
A primeira
if
cláusula será verdadeira se a tela em execução ainda não-z "${STY}"
estiver conectada a um terminal (-t 0
) e eu não estiver executando a sudo (que às vezes não muda$USER
).A
reattach
função primeiro verificará se o ssh foi chamado com uma porta ssh-agent ativa (-n "${SSH_AUTH_SOCK}"
). Em seguida, substituirá o que estiver no~/.ssh/agent-script
arquivo de soquete ativo no momento e substituirá a variável de ambiente ($SSH_AUTH_SOCK
) pelo novo valor. Em seguida, o script substituirá o shell atual por uma únicascreen
sessão (garantindo que apenas um exista). Quaisquer argumentos para areattach
função são passados para o comando (${1:+"$@"}
).A última parte primeiro remove todas as sessões mortas (
screen -wipe
), informa ao usuário (eu) que a tela começará em breve e poderá retornar ao shell pressionando Ctrl- C. Em seguida, aguarda 5 segundos e chama areattach
função.fonte
Primeiro, se você usar o byobu, poderá configurar uma nova sessão do shell para sempre iniciar automaticamente o byobu (que é essencialmente uma boa configuração de tela, embora as versões mais recentes possam usar o tmux como back-end). Se você realmente não quer o byobu, provavelmente pode configurar a tela para se conectar manualmente, editando seu
.profile
ou outro script de configuração de shell paraexec screen
ifTERM != "screen"
.Se você não gostar disso, poderá usar o
authorized_keys
arquivo para executar um comando específico para conexões com uma chave específica (e poderá ter quantas chaves desejar). Vejaman sshd
para detalhes. Eu sugiro que você faça o comando executar um script que verifique se a tela está em execução e se conecta, ou então inicia uma nova sessão.Quanto à desconexão no Ctrl-D, a tela permite que você configure os mapeamentos de teclas no seu
.screenrc
. Vejaman screen
para detalhes. Você está procurando "bindkey".fonte
Talvez totalmente irrelevante para a sua pergunta, mas você já pensou em usar o TMUX. Ele oferece muitas funcionalidades que você procura imediatamente.
Por exemplo. se você se desconectar de uma sessão SSH quando estiver no TMUX, tudo o que você precisa fazer é voltar ao ssh e executar "tmux a" para anexar à sua sessão. Desde que comecei a usar o TMUX, esqueci o que são os comandos nohup / disown ... se você precisar executar algo e sair - execute-o dentro do tmux e desanexe. A saída do comando será armazenada em buffer, para que você possa revisá-la mais tarde.
para anexar automaticamente, você pode adicionar algo como abaixo ao .bashrc:
ou ainda mais fácil
Possui menor consumo de memória e o IMHO geral é muito melhor / mais fácil de usar.
O atalho meta-d é o mapeamento padrão para desanexar no TMUX.
fonte
screen -dAr default || screen -AS default
funciona para mim. Eu adiciono isso ao meu ~ / .bashrc .Explicando brevemente os switches:
d
- Desconecte a tela, se ainda estiver conectada, de outra sessão.A
- Adapte as janelas da tela ao novo tamanho do terminal.r default
- Anexe a uma tela chamada padrão.Se o primeiro comando da tela (o anterior
||
) não for bem-sucedido, o segundo será executado:A
- Como explicado acima ...S default
- Crie a nova sessão de tela com o nome padrão .fonte
Eu sugiro usar byobu . Esta ferramenta usa o tmux e fornece uma barra de ferramentas agradável e outros recursos convenientes de troca de janelas, teclas de atalho etc.
Com esses comandos acima, após um SSH bem-sucedido, efetue login no sistema com try e connect a uma sessão existente do byobu-tmux; caso contrário, ele criará uma nova sessão.
fonte