Tentei isso com expect, mas não funcionou: fechou a conexão no final.
Podemos executar um script via ssh que fará logon em máquinas remotas, execute um comando e não desconecte?
Então, ssh em uma máquina, faça o cd para esse e aquele diretório e, em seguida, execute um comando e mantenha-se conectado.
-Jonathan
(espero que eu usei)
#!/usr/bin/expect -f
set password [lrange $argv 0 0]
spawn ssh root@marlboro "cd /tmp; ls -altr | tail"
expect "?assword:*"
send -- "$password\r"
send -- "\r"
interact
linux
ssh
command-line-interface
automation
Jonathan
fonte
fonte
Respostas:
Adicionar um
; /bin/bash
ao final da sua linha de comando no lado remoto? Isso é:Melhor ainda, altere o .bashrc do root para algo como:
:)
fonte
-i
a essa festança.ssh -t
alocar um pty.Se você concorda em fazer isso no Python, o pexpect tem um exemplo que faz quase exatamente o que você está pedindo:
Para fazer isso com ssh em vez de ftp, você deseja um código semelhante ao seguinte (os arquivos de exemplo no pexpect têm muito mais detalhes e informações, mas aqui estão os princípios básicos):
Não me interpretem mal, eu AMO esperar (especialmente a autoexpect), mas o python é muuuuito mais fácil para eu grunhir.
fonte
A maneira provavelmente mais fácil e limpa de ssh em um servidor, gerar um shell interativo e executar comandos dentro desse shell é criar um arquivo rc personalizado para o bash.
No seu arquivo bashrc personalizado no servidor, primeiro crie o arquivo padrão e depois adicione seus comandos personalizados, por exemplo
~ / .bashrc_custom:
Você pode iniciar sua sessão SSH assim:
A
-t
opção força uma alocação pseudo-tty, para que coisas como conclusão de tabulação funcionem.A
--rcfile
opção especifica qual arquivo rc carregar, em vez do padrão. Importante: você deve colocar "argumentos de traço duplo" na linha de comando antes das opções de caractere único para ser reconhecido.O
-i
argumento para / bin / bash existe para chamar um shell interativo.fonte
Se alguém quiser informações sobre o que está acontecendo em segundo plano, dê uma olhada no manual do sshd:
https://www.freebsd.org/cgi/man.cgi?sshd(8)#LOGIN_PROCESS
fonte
Geralmente, você deve evitar o uso do ssh dessa maneira, pois isso anula seu objetivo.
Faça um
para ver se sua chave está listada no pool de sessões ativas do ssh ou adicione-a você mesmo (com ssh-add).
fonte