Exécutez une commande à distance à l'aide du fichier de configuration ssh


32

J'aimerais pouvoir configurer une commande à exécuter lors de la connexion ssh à un serveur, sans avoir besoin de la taper. Fondamentalement, je recherche l'équivalent du fichier de configuration ssh:

ssh host command

de sorte que tout ce que je dois taper est:

ssh host

et la commande s'exécute.

Réponses:


16

Il est également possible d'insérer une commande dans votre fichier de clés autorisées. ( ~/.ssh/authorized_keys) Cela vous permet d'exécuter une commande personnalisée pour chaque clé du fichier. Je l'utilise pour transmettre des connexions shell via mon pare-feu. Le résultat est que je peux ssh à un hôte et il connecte automatiquement la session à un hôte à l'intérieur du réseau. L' authorized_keysentrée ressemble à ceci:

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 ...

Plus précisément, la redirection est pour mon instance de gitolite. Cela permet un accès extérieur simple sans exposer directement l'hôte gitolite à un accès externe. Consultez la page de manuel pour plus d'informations. ( http://linux.die.net/man/8/sshd )


1
C'est génial, je ne savais pas que tu pouvais faire ça. +1
Brian Wigginton

3
Si vous placez la commande dans votre fichier authorized_keys, cela cassera des choses telles que rsync et scp - vous obtiendrez quelque chose comme ceci: open terminal failed: not a terminal. Sachez également que si la commande échoue, vous ne pourrez pas vous connecter. Je l'ai découvert à la dure.
John Hunt

11

Si vous exécutez OpenSSH, il semble qu'il ~/.ssh/rcsoit exécuté lors de la connexion .


3
Se /.ssh/rctrouve sur la machine cliente ou serveur? On dirait que d'après les documents du serveur, non?
2010

1
Oui, ce serait sur la machine serveur.
coneslayer

Malheureusement, le rcfichier ne semble pas exécuter des choses comme screen, obtenant une erreur "Doit être connecté à un terminal"
davidparks21

10

Vous pouvez configurer un alias bash.

Dans votre fichier .bashrc, mettez:

alias ssl='ssh some_host run_command'

Ensuite, vous n'auriez même pas à taper le nom d'hôte.

Ou, si vous vouliez le faire avec plusieurs hôtes (et que plusieurs alias ne fonctionneraient pas), utilisez un petit script:

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

2

Vous résolvez à froid cela dans votre .ssh/config file, pour l'hôte où vous souhaitez exécuter une commande, ajoutez

  RequestTTY yes
  RemoteCommand <some command>

<some command>est votre commande. Cela fonctionne également avec screen ou tmux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.