2009-12-13 27 views
43

estoy tratando de crear una conexión ssh y hacer algunas cosas en el servidor remoto desde el script.Cómo ssh desde dentro de un script bash?

Sin embargo el terminal me pide una contraseña, a continuación, se abre la conexión en la ventana de terminal en lugar de la secuencia de comandos. Los comandos no se ejecutan hasta que salgo de la conexión.

Como puedo ssh desde dentro de un script bash?

Respuesta

53
  1. si desea que la solicitud de contraseña que se vaya a continuación, utilizar la autenticación basada en una clave (described here).

  2. Para ejecutar comandos de forma remota a través de ssh que tiene que dar como un argumento para ssh, como la siguiente:

root @ host: ~ # ssh root @ www 'ps-ef | grep apache | grep -v grep | wc -l'

+4

¿Qué pasa si tengo varias líneas (sólo para la claridad del código), ¿cómo puedo pasar eso a ssh? – blong

+9

Use un punto y coma como separador de comandos. 'cd/var/www; cp foo bar; ' – halfdan

+0

Se corrigió el enlace roto. – halfdan

2

Lo que hay que hacer es cambiar las claves SSH para el usuario la secuencia de comandos se ejecuta como. Echar un vistazo a this tutorial

Después de hacerlo, las secuencias de comandos se ejecutarán sin la necesidad de introducir una contraseña. Pero, por seguridad, ¡no querrás hacer esto para usuarios root!

14

Si desea seguir utilizando contraseñas y no utilizar el intercambio de claves, entonces puede lograr esto con 'esperan', así:

#!/usr/bin/expect -f 
spawn ssh [email protected] 
expect "password:" 
sleep 1 
send "<your password>\r" 
command1 
command2 
commandN 
3

Hay otra manera de hacerlo utilizando Conexiones compartidas, es decir: alguien inicia la conexión, usando una contraseña, y cada conexión subsiguiente se multiplexará en el mismo canal, anulando la necesidad de una nueva autenticación. (Y su rápido también)

# ~/.ssh/config 
ControlMaster auto 
ControlPath ~/.ssh/pool/%[email protected]%h 

a continuación, sólo tiene que entrar, y todo el tiempo que está en el sistema, la escritura del golpe será capaz de abrir las conexiones ssh.

continuación Puede detener el script de trabajar cuando alguien no lo ha abierto el canal por:

ssh ... -o KbdInteractiveAuthentication=no .... 
Cuestiones relacionadas