2009-06-16 29 views
5

Me gustaría crear un script que inicie sesión automáticamente en un servidor remoto y tome un archivo en el servidor. La secuencia de comandos ya inicia sesión en el servidor, sin embargo, los comandos no se ejecutan en esa máquina. Una vez que me desconecto del servidor remoto, los comandos se ejecutan en la máquina del cliente.script ssh de UNIX, ejecutando comandos en el servidor remoto

!/bin/sh 
ssh -o PreferredAuthentications=publickey [email protected] 
cd ~/folder 
"i would like to grab file and copy it to client machines folder" 

EDIT: No estoy seguro de si se dio cuenta, pero estoy acostumbrado una conexión sin contraseña al servidor remoto usando ssh y keygeneration. Aprecio las ideas, pero estoy buscando posibles comandos de tubería o ejecutar comandos en el servidor remoto con la secuencia de comandos en el cliente. Me doy cuenta de que el servidor remoto no tiene acceso a la secuencia de comandos del cliente, sin embargo, tenía curiosidad si era posible canalizar los comandos a través de la conexión ssh.

+0

Si insiste en ejecutar comandos a través de ssh, tendrá que prefijar cada comando con una frase 'ssh user @ server exec'. Sin embargo, lo que quiero saber es: ¿está utilizando el ejemplo anterior "obtener archivo" como referencia? y, ¿tiene una secuencia de comandos más compleja para ejecutar de esta manera? – nik

+0

autorización de clave pública se puede configurar utilizando ssh-keygen en su cliente y el archivo authorized_keys en el servidor (di un enlace de referencia en mi respuesta a continuación). – nik

Respuesta

14

Debe utilizar scp ("copia segura") en lugar de ssh ("shell seguro").

+0

estoy usando ssh para conectar de forma remota sin ingresar una contraseña, si uso scp, me pedirá una contraseña ... ¿hay alguna manera de usar el comando scp con autorización de clave? – user123661

+3

scp usa ssh detrás de las escenas. Puede usar la opción -o para pasar los parámetros que desee a ssh (como PreferredAuthentication) – itsadok

2

ssh en una secuencia de comandos no funciona así. Sin embargo, tiene la capacidad de ejecutar un comando en un servidor remoto especificando el comando como argumento para ssh, como:

ssh [email protected] do_foo.sh

ejecutará el script do_foo.sh en el servidor

Sin embargo, para su situación parece que lo que realmente está buscando es SCP.

3

Debe utilizar ssh en esta forma de ejecutar secuencias de comandos en máquinas remotas,

ssh [email protected] exec /path/to/script/script.sh 

donde script.sh está disponible en el servidor en la ruta dada desde el inicio de sesión user.


Si el guión no está presente en el servidor pero disponibles en la máquina local (y no tiene NFS común compartido el espacio entre las dos máquinas), debe enviar el guión con scp como este,

scp script.sh [email protected]:/path/to/script/ 

Ahora, para su caso específico de obtener un archivo de servidor sólo debe ejecutar,

scp [email protected]:/path/to/file/filename . 

como algunas otras respuestas ya sugieren.

+0

Me preguntaba si podría ver mi edición y decirme lo que piensa o si es posible usar la autorización de clave con SCP. – user123661

+0

autorización de clave pública se puede hacer con dos pasos. (1) use ssh-keygen para crear un par de claves y luego, (2) copie la línea de clave pública en el archivo 'authorized_keys' en el servidor; presente en el directorio '~/.ssh /'. – nik

+0

@brjones, esta referencia debería ayudar, http://www.ssh.com/support/documentation/online/ssh/adminguide/32/Public-Key_Authentication-2.html – nik

0

Varias personas ya han explicado cómo hacer mejor y más fácil el ejemplo particular que usted brinda.

Si realmente necesita necesita para escribir una interacción remota, puede considerar usar expect.

13

Además, si usted no quiere tener una secuencia de comandos disponibles en el servidor remoto, intente lo siguiente:

ssh thehost 'cd /tmp; ls; echo Hello world, I am `hostname`' 

y de SCP-menos copiado:

ssh localhost 'cat /bin/bash' > local_bash 
+0

por qué debería ser '' ', no' "' in 'ssh thehost 'cd/tmp; ls; echo Hola mundo, soy' hostname''' –

5

Si su objetivo es solo para transferir archivos, debes usar scp. Pero para ejecutar algunos comandos en el host remoto sin tener un guión específico en ese host remoto, sólo tiene que utilizar la entrada estándar como esto:

!/bin/sh 
ssh -o PreferredAuthentications=publickey [email protected] << EOT 
cd ~/folder 
echo "hello" > hello.txt 
... 
EOT 
1

SCP? Remote es un dispositivo con un sistema de archivos de solo lectura. No quiero dejar el script atrás, o usar múltiples invocaciones de ssh para limpiarlo después o múltiples invocaciones para ejecutarlo una línea a la vez. La lista continúa ...

great solution here by Yarek T:

Puede que tenga que jugar un poco con las comillas o escapes pero hace el trabajo, con una sola conexión con el control remoto y el guión restante local.

2

Además de la respuesta por Tiemen, por supuesto que puede conducir los comandos de la secuencia de comandos local con:

ssh thehost < commands.sh 
0

Si desea invocar un script en el host remoto, el cual presenta en localhost

ssh remote [email protected] < localScript.sh

Si desea invocar un guión que ya está en host remoto

ssh remote [email protected] "$PATH_OF_SCRIPT/remoteScript.sh"

Cuestiones relacionadas