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.

PeterJCLaw
la source

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 )

dav
la source
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 .

coneslayer
la source
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:~$
Kevin M
la source
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.

Florian Lautenschlager
la source