Intenté esto con esperar, pero no funcionó: cerró la conexión al final.
¿Podemos ejecutar un script a través de ssh que inicie sesión en máquinas remotas, ejecute un comando y no se desconecte?
Entonces ssh en una máquina, cd a tal y tal directorio, y luego ejecute un comando, y permanezca conectado.
-Jonathan
(espero que lo use)
#!/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
fuente
fuente
Respuestas:
¿Agregar un
; /bin/bash
al final de su línea de comando en el lado remoto? Es decir:Aún mejor, cambie el .bashrc de la raíz para que sea algo así:
:)
fuente
-i
a esa fiesta.ssh -t
asignar una pty.Si está de acuerdo con hacer esto en Python, pexpect tiene un ejemplo que hace casi exactamente lo que está pidiendo:
Para hacer esto con ssh en lugar de ftp, querrás un código similar al siguiente (los archivos de ejemplo en pexpect tienen muchos más detalles e información, pero aquí están los conceptos básicos):
No me malinterpreten, ME ENCANTA esperar (especialmente autoexpect), pero Python es muchísimo más fácil de asimilar.
fuente
La forma probablemente más fácil y limpia de ingresar a un servidor, generar un shell interactivo y ejecutar comandos dentro de ese shell es crear un archivo rc personalizado para bash.
En su archivo bashrc personalizado en el servidor, primero obtenga el archivo predeterminado y luego agregue sus comandos personalizados, p. Ej.
~ / .bashrc_custom:
Luego puede iniciar su sesión SSH de esta manera:
La
-t
opción fuerza una asignación de pseudo-tty, de modo que cosas como completar la tabulación funcionen.La
--rcfile
opción especifica qué archivo rc cargar en lugar del predeterminado. Importante: debe colocar "argumentos de doble guión" en la línea de comando antes de las opciones de un solo carácter para que se reconozca.El
-i
argumento para / bin / bash está ahí para invocar un shell interactivo.fuente
Si alguien quiere información sobre lo que está sucediendo en segundo plano, debería consultar el manual de sshd:
https://www.freebsd.org/cgi/man.cgi?sshd(8)#LOGIN_PROCESS
fuente
En general, debe evitar usar ssh de esta manera, ya que anula su propósito.
Hacer un
para ver si su clave aparece en el grupo de sesiones activas de ssh o agréguela usted mismo (con ssh-add).
fuente