Ejecute un comando remoto utilizando el archivo de configuración ssh

32

Me gustaría poder configurar un comando para ejecutar el inicio de sesión ssh en un servidor, sin necesidad de escribirlo. Básicamente estoy buscando el archivo de configuración ssh equivalente a:

ssh host command

así que todo lo que necesito escribir es:

ssh host

y el comando se ejecuta.

PeterJCLaw
fuente

Respuestas:

16

También es posible insertar un comando en su archivo de claves autorizado. ( ~/.ssh/authorized_keys) Esto le permite ejecutar un comando personalizado para cada tecla del archivo. Lo uso para reenviar conexiones de shell a través de mi firewall. El resultado es que puedo ssh a un host y se conecta automáticamente la sesión a un host dentro de la red. La authorized_keysentrada se ve así:

command="ssh -Tq <hostname> \"$SSH_ORIGINAL_COMMAND\"",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA... the rest of the key ...

Más específicamente, la redirección es para mi instancia de gitolita. Esto permite un acceso externo simple sin exponer directamente al huésped de gitolita a ningún acceso externo. Consulte la página del manual para obtener más información. ( http://linux.die.net/man/8/sshd )

dav
fuente
1
Esto es increíble, no sabía que podías hacer esto. +1
Brian Wigginton
3
Si coloca el comando en su archivo autorizado_claves, romperá cosas como rsync y scp: obtendrá algo como esto: falló el terminal abierto: no es un terminal. Además, tenga en cuenta que si el comando falla, no podrá iniciar sesión. He descubierto esto de la manera difícil.
John Hunt
11

Si está ejecutando OpenSSH, parece que ~/.ssh/rcse ejecuta al iniciar sesión .

asesino
fuente
3
¿Está /.ssh/rcubicado en la máquina del cliente o servidor? Parece de los documentos del servidor, ¿verdad?
heavyd
1
Sí, eso estaría en la máquina del servidor.
coneslayer
Por desgracia, el rcarchivo parece no funcionar cosas como screen, recibiendo un error "Debe ser conectado a un terminal"
davidparks21
10

Podrías configurar un alias bash.

En su archivo .bashrc, ponga:

alias ssl='ssh some_host run_command'

Entonces ni siquiera tendría que escribir el nombre de host.

O, si desea hacer esto con varios hosts (y varios alias no funcionarían), use un pequeño script:

kevin@box:~$ cat ssl.sh
#!/bin/sh
ssh $1 some_command
kevin@box:~$
Kevin M
fuente
2

Puede resolver esto en su .ssh/config file, para el host donde desea ejecutar un comando, agregue

  RequestTTY yes
  RemoteCommand <some command>

donde <some command>esta tu comando Esto también funciona con pantalla o tmux.

Florian Lautenschlager
fuente