
Tengo un script de shell que iniciará una serie de trabajos en un servidor remoto. Puedo ingresar a este servidor (¡pero requiere una contraseña!) y ejecutar los scripts manualmente, pero hay ciertos pasos que también se realizan localmente, por lo que me gustaría evitar enviar y ejecutar cosas manualmente. ¿Hay alguna manera de iniciar sesión/ssh automáticamente y luego iniciar el comando dentro de un script de shell local más grande?
Respuesta1
Le sugeriría que si tiene muchos comandos para ejecutar en el servidor remoto, los cree como un script de shell que cargue una vez y luego los ejecute una vez según el comando ssh.
Asegúrese de tener permisos de ejecución en el script y de que no dependa de ninguna información obtenida de su sesión normal de shell, como variables o rutas establecidas por un script de inicio de sesión interactivo, por ejemplo: .bashrc, ya que no se ejecutan. al ejecutar un comando a través de un comando ssh remoto.
También recuerde verificar para asegurarse de que el "retorno" del script esté marcado para asegurarse de que el comando se complete como esperaba.
Respuesta2
Para ejecutar un script/comando en la ejecución del host remoto
ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>
Agregue la -f
opción si desea que ssh pase inmediatamente a segundo plano en lugar de esperar a que finalice el comando.
En cuanto al inicio de sesión, la identificación automática de contraseñas suele ser una mala idea. Si realmente es imposible para su configuración, generar un par de claves privada/pública (con la clave privada almacenada en la máquina local y la clave de publicación almacenada en la máquina remota) y utilizarla para la autenticación, como se sugiere en el comentario anterior. , tendrá que volver a una herramienta sshpass
donde puede iniciar su sesión/comando remoto a través de:
sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]
Respuesta3
Puede utilizar la autenticación de clave pública/privada para establecer su cuenta ssh
sin necesidad de una contraseña. Para hacer eso, solo necesita generar el par de claves ( ssh-keygen
) y agregar su clave pública al archivo de usuario ~/.ssh/authorithed_keys del servidor.
#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....