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