Ejecutar un comando en el host remoto con SSH interactivo (condicionalmente)

9

Me gustaría poder ejecutar automáticamente un comando en un host remoto cada vez que inicie sesión en ese host, pero dentro de la sesión SSH interactiva actual.

Algo como

ssh user@remotehost [run do.sh]

donde do.shrealiza un par de tareas de limpieza y luego se vuelve a conectar a una screensesión (actualmente lo ejecuto do.shmanualmente después de iniciar sesión en el host).

No quiero agregarlo .bashrcporque inicio sesión en este host desde otras máquinas y no quiero do.shejecutarlo cuando inicio sesión desde allí, así que necesito que sea opcional.

Jim Farkas
fuente
1
¿Por qué no simplemente corres ssh user@remotehost /path/to/do.sh? Si funciona, incluso puedes usar un alias en .ssh / config o en tu .bashrc personal
Coren
Entonces, ¿desea ejecutar "do.sh" cuando inicia sesión en remotehost desde algún lugar, pero no cuando inicia sesión en remotehost desde otro lugar? ¿ Desde qué hosts se conecta debería activar "do.sh" y cuáles otros no deberían?
Mat
Sí, quiero ejecutarlo a veces, pero no todo el tiempo, la razón de esto es que tengo un atajo de teclado desde un lanzador en mi Mac que me da lo que quiero la mayor parte del tiempo. Golpeé un atajo y quiero ingresar en el cuadro y luego volver a conectarlo a una sesión de pantalla, pero no quiero hacerlo si uso un terminal normal como "ssh user @ host". La solución mencionada a continuación por Patkos hace exactamente lo que necesito.
Jim Farkas

Respuestas:

15

Podrías probar algo como esto:

ssh server -t "do.sh; bash --login"

como se sugiere aquí: /server/167416/change-directory-automatically-on-ssh-login

O puede intentar usar la opción 'LocalCommand' en sshd_conf (o ~ / .ssh / config) como se describe en la página de manual oficial: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

Patkos Csaba
fuente
1
¡¡Muchas gracias!! El servidor ssh -t "/home/user/do.sh; bash --login" funcionó para mí. köszönöm szépen!
Jim Farkas
1
Szivesen (De nada)
Patkos Csaba
@PatkosCsaba Evita otros idiomas además del inglés aquí. Esto se aplica también a los comentarios.
LinuxSecurityFreak
3

Una parte del rompecabezas: suponiendo que OpenSSH, el ssh cliente establecerá la siguiente variable de entorno:

SSH_CONNECTION Identifica los extremos del cliente y el servidor de la conexión. La variable contiene cuatro valores separados por espacios: dirección IP del cliente cliente, número de puerto del cliente, dirección IP del servidor y número de puerto del servidor.

Por lo tanto, puede utilizar esta información para averiguar de dónde proviene su conexión .

sr_
fuente