web-dev-qa-db-fra.com

Script shell de la machine locale pour exécuter la commande sur la machine distante, puis continuer sur la machine locale

Le problème est le suivant: je veux copier des fichiers depuis une machine distante.

Je cherche un moyen d'écrire un script Shell qui se connecterait à la machine distante, obtiendrait l'emplacement du fichier stocké, une fois que je me déconnecte de l'emplacement du serveur distant et utilise scp depuis la machine locale avec l'emplacement obtenu pour copiez le fichier.

Plus précisément, je veux savoir comment à partir d'un script, je me connecterais à une machine distante, ferais des tâches sur cette machine. Déconnectez-vous et poursuivez l'exécution localement.

10
gnsr

Solution 1:

remote_output="$(ssh user@Host "remote command")"
scp "user@$Host:$remote_output" /local/path

Cela fonctionne en se connectant à la machine distante, en exécutant certaines commandes et en copiant la sortie dans une variable sur votre machine locale. Dites, en faisant écho du chemin du fichier à distance, en le capturant localement.

Solution 2:

ssh user@Host "determine_path; cat filename" >local_filename

Cela fonctionne en recherchant et en sortant le fichier directement à distance et en le redirigeant vers un fichier localement. Cela saute scp. Cela nécessite que les étapes avant "cat" n'aient pas de sortie (que vous pouvez résoudre avec &>/dev/null).

15
Mark Griffin

Vous pouvez écrire un script au format suivant:

command1
command2
...
ssh user@machine command3
...
command4
command5

Vous devez configurer les clés SSH pour obtenir command3 exécuté sans vous demander de mot de passe.

20
Khaled

Je suppose que vous avez déjà une idée de la façon dont vous allez identifier le fichier que vous souhaitez copier et que vous êtes en mesure ou avez déjà écrit un script ou un ensemble de commandes qui s'exécuteront sur la machine distante qui effectue cette identification .

En outre, je suppose également que ces commandes impriment sur la sortie standard le chemin d'accès complet au fichier, ou le chemin d'accès relatif au fichier, par rapport au répertoire personnel de l'utilisateur SSH utilisé pour la copie. Dans mon exemple, le nom du script est "getfilepath.sh", même s'il ne doit pas nécessairement s'agir d'un script Shell, il peut s'agir d'un autre exécutable ou même d'une série de commandes.

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

Dans le code ci-dessus, la notation "$ ()" est un moyen de capturer la sortie standard d'une commande en tant que variable Shell. C'est assez standard, mais si vous utilisez un Shell qui ne le comprend pas, vous pouvez à la place entourer la commande de "back-ticks", qui sont les marques d'accent à gauche de la touche 1 sur la plupart des claviers américains.

2
Jeremy Impson

il est peut-être possible de déclencher une tâche planifiée sur la machine distante qui fait tout le travail.

Cela vous empêcherait d'être connecté à la machine distante pendant que vous recherchez l'emplacement des fichiers que vous souhaitez copier.

Je fais ça:

la ligne de commande déclenche une tâche planifiée qui exécute un batchscript dans mon cas.

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

Meilleures salutations

0
Denyo