Script de Shell: ssh a la máquina remota, luego salir: 'salir' no funciona

Script de Shell: ssh a la máquina remota, luego salir: 'salir' no funciona

Tengo un script de shell del siguiente tipo:

#!/bin/bash

ssh [email protected]
echo "Hi"
exit

Lo ejecuto localmente para hacer algo en un servidor remoto (representado por 'echo "Hola"'). Sin embargo, cuando lo ejecuto, veo el mensaje en el servidor remoto, por lo que el comando 'salir' no se ejecuta. Cuando escribo manualmente 'salir' en el mensaje remoto, veo "Conexión a myremotemachine.com" cerrada yentonces "Hola". ¿Cómo puedo configurar el script de shell para que salga correctamente y me muestre el mensaje (local) desde el cual lo ejecuté?

https://unix.stackexchange.com/questions/89747/ssh-exits-after-quit-case-in-bash-scriptyssh y shell a través de ssh: ¿cómo salir?Parece algo relacionado, pero no pude adaptar las ideas presentadas allí./

ACTUALIZAR

La siguiente versión, no tan mínima, conduce a Unmatched '..

#!/bin/bash

date=`date "+%Y-%m-%d"`
rsync -acxzP --delete --link-dest=/u3/mylogin/backup/old_backup /home/mylogin [email protected]:/u3/mylogin/backup/$date\_backup
ssh [email protected] bash -c "'
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
exit
'"

Si elimino las comillas dobles en este fragmento, obtengo: bash: -c: option requires an argumentydate: Undefined variable.

Respuesta1

Esto debería solucionar tu problema.

ssh [email protected] << HERE
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
HERE

O puedes hacer lo siguiente. Coloque todos los comandos que desee ejecutar en el host remoto en un script separado. Dale un nombre como remoto.sh

Ahora ejecuta lo siguiente

ssh [email protected] 'bash -s' < /path/to/remote.sh

Donde contiene remoto.sh.

rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup

Respuesta2

Tu puedes hacer

$ssh user@comp echo abc<ENTER>

luego ejecutará ese comando (generando abc) y saldrá

Respuesta3

¿Quizás no tienes una nueva línea al final del guión?

Si no hay una línea vacía (exactamente LF, un carácter de avance de línea) después de salir, su secuencia de comandos no "presionará Intro" mediante programación.

Respuesta4

Aunque la respuesta de Barlops es correcta, creo que podemos ampliarla para que quede más clara. Como parece que estás usando un script, sugeriría algo como esto:

#!/bin/bash

ssh [email protected] "echo Hi\!"

Lectura adicional: también le sugiero que busque caracteres especiales y cuándo necesite escapar de ellos, ya que bash analizará automáticamente los signos de exclamación cuando estén entre comillas dobles. Puedes resolver esto usando comillas simples o el carácter de barra invertida para "escapar".

Editar:

#!/bin/bash
date=`date "+%Y-%m-%d"`
rsync -acxzP --delete --link-dest=/u3/mylogin/backup/old_backup /home/mylogin [email protected]:/u3/mylogin/backup/$date\_backup
ssh [email protected] '
date=`date "+%Y-%m-%d"`
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
'

Cuando probé una versión simplificada, la variable de fecha funciona sin problemas, tal vez esto corrija el problema de bash -c que estaba teniendo. Además, la salida al final no es necesaria; cuando se ejecuta el último comando, la sesión ssh se cierra automáticamente.

información relacionada