Comment supprimer un fichier sur une machine distante via SSH à l'aide d'un script shell?

32

J'écris un script shell dans lequel je dois supprimer un fichier sur une machine distante via un script shell.

Débit manuel:

ssh username@domain.com

.. puis au domaine:

cd ./some/where
rm some_file.war

Comment accomplir cette tâche?

mico
la source

Réponses:

49

Vous pouvez transmettre au sshclient une commande à exécuter au lieu de démarrer un shell en l'ajoutant à la commande ssh.

ssh username@domain.com 'rm /some/where/some_file.war'

Vous n’avez pas besoin d’ cdun emplacement pour supprimer quelque chose tant que vous spécifiez le chemin complet, c’est donc une étape supplémentaire que vous pouvez ignorer.

La prochaine question est l'authentification. Si vous le lancez, un mot de passe vous sera demandé. Si vous ne souhaitez pas entrer cette information de manière interactive, vous devez configurer l’authentification Publickey.

Caleb
la source
3
Je pensais que -c était cipher_spec - non? Je ne pensais pas que -c était nécessaire pour passer une commande.
Scott C Wilson
Merci à vous tous pour vos réponses rapides. Cette réponse était celle qui contenait la plupart des éléments de la solution. @Caleb a donc coché cette fois.
Mico
Devrions-nous ajouter -fà l' rmexécution d'un appel à distance?
Fedir RYKHTIK
1
@ Fedir NO! La question concerne spécifiquement les fichiers et non les répertoires. Si des avertissements ou des erreurs sont générés, rmils doivent certainement être transmis à l'appelant, à moins que l'utilisateur ne sache à quoi s'attendre et pourquoi il ignore quelque chose. Beaucoup d'erreurs et un débogage frustrant plus tard peuvent être évités en utilisant seulement les options dont vous avez besoin dans un scénario donné.
Caleb
1
@ Fedir L' -foption rmest abrégée --forceet a pour effet de déterminer si des erreurs sont générées pour des fichiers inexistants ou des arguments factices. Habituellement, les commandes exécutées sur des shells non interactifs sont de toute façon moins interactives, mais si ce n’est pas le cas ou si vous obtenez un message interactif, la chose à faire serait de corriger les paramètres directement liés à cela. Si vous Scripting cela , vous ne devriez pas avoir cette question de toute façon, et si vous êtes dans un shell interactif (où vous avez la possibilité de fautes de frappe catastrophiques) , vous devez utiliser -Isur --interactive=neverpour définir votre comportement souhaité.
Caleb
3

Si vous souhaitez supprimer un fichier distant avec l'utilisation de sudo, vous devez exécuter quelque chose comme ceci:

ssh -tt user@host 'stty raw -echo; sudo rm /path/to/file' < <(cat)

Détails .

Vladislav Rastrusny
la source
2

La commande ssh a un paramètre de commande (dernier paramètre de la commande) que vous pouvez utiliser pour exécuter des commandes à distance.

Scott C Wilson
la source