Registre o terminal SSH no linux

4

Estou configurando um host de bastiões

Servidor de salto

Eu estou tentando gravar terminais SSH no servidor automaticamente, estou usando TermRecord . O problema começa quando adiciono TermRecord -o ss.html ao meu .bashrc :

echo "TermRecord -o ss.html" >> ~/.bashrc

O terminal inundará "script iniciado" sem salvar nada.

    
por Mohamed Ali Belhajali 25.01.2018 / 01:51

2 respostas

2

Eu não tenho absolutamente nenhuma experiência com TermRecord , minha resposta é baseada em uma suposição razoável (espero que sim) sobre o que acontece.

Ele parece como TermRecord sources .bashrc novamente, ou é mais provável que ele execute outro bash que origina o arquivo. Eu assumo o último . De qualquer forma, ele executa TermRecord novamente, mas outro bash sources .bashrc novamente e assim por diante.

Se isso impedir você de fazer login, consulte Login sem executar bash_profile ou bashrc . Eu tentaria ssh -t username@hostname /bin/sh e fixaria meu .bashrc de lá.

Para que funcione como esperado, você precisa encontrar uma maneira de suprimir a execução de TermRecord se já estiver dentro de TermRecord . A melhor maneira seria se o programa adicionasse alguma variável ao ambiente, para que você pudesse detectá-la. Não consigo encontrar se define ou não qualquer variável.

Caso isso não aconteça, você pode fazer isso sozinho. Em vez de

TermRecord -o ss.html

no seu .bashrc use algo assim:

[ -z "$TR_PPID" ] && { export TR_PPID=$$; TermRecord -o ss.html; }

Isso significa que: se a variável estiver vazia, configure-a para o PID do shell e execute TermRecord ; caso contrário, não faça nada (continue na próxima linha).

Notas:

  • Certifique-se de que a variável denominada TR_PPID não seja usada por TermRecord ou qualquer outra coisa. Eu fiz este nome (de "TermRecord parend PID"), pode haver uma colisão embora.
  • Codificado -o ss.html pode causar problemas se você efetuar login várias vezes.
  • Se TermRecord for executado, o restante de .bashrc será originado pelo bash externo no final de TermRecord . O bash interno irá originar o arquivo por conta própria.
  • Para evitar processos de aninhamento, você pode considerar substituir o bash externo por TermRecord em vez de criar um processo separado; isso pode ser feito com exec TermRecord -o ss.html . Nesse caso, você provavelmente desejará que toda a linha esteja no início de seu .bashrc . Agora a variável significaria "TermRecord PID", então TR_PID seria um nome melhor.

Alternativa possível (?): use TermRecord como seu shell de login.

  • Apenas se ele suportar ser um shell de login (não sei disso); caso contrário, pode causar problemas (mas talvez um wrapper personalizado o conserte). As experiências com a alteração do seu shell de login (consulte chsh ) devem ser executadas sem sair do shell antigo ou até mesmo com um "shell de emergência" extra. Se você, de alguma forma, se trancar e não conseguir logar novamente, ainda terá o shell antigo em funcionamento e poderá consertá-lo.
  • Isso pode exigir a edição /etc/shells .
  • Nesse caso, você não deve começar a TermRecord do seu .bashrc .
por 25.01.2018 / 09:25
0

Pelo que entendi, você deseja gravar todos os seus terminais stdin / stdout enquanto ssh'd para um servidor?

considere o uso do comando script

script <output_filename>

e, em seguida, ssh para o seu servidor, uma vez que você terminar, feche sua conexão ssh e

exit

para parar a gravação do script, o $ output_filename que você forneceu estará em seu diretório atual.

ps: você pode garantir que suas gravações sejam sempre nomeadas exclusivamente usando a seguinte convenção

script foo_$(date  +"%Y-%m-%d%H%M")   # full date and time included in filename

ou

script foo_$(date +%s)  # unique number calculate by seconds since the Unix epoch
    
por 11.02.2018 / 19:57