Est-il possible d'écrire un script bash,
- serait démarré à partir de la machine A, se connecte à une autre machine B par ssh (les deux machines A et B seraient des machines Linux),
- copie certains fichiers sur la machine B
- exécute un script python un script python donné sur ces machines.
- transfère les résultats à la machine A
- se déconnecte de la machine B.
Est-ce techniquement faisable?
bash
ssh
shell-script
Aufwind
la source
la source
cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
ControlMaster=yes
etControlPath=/path/to/socketfile
, puis démarrer une connexion ssh avec-f
pour exécuter un ssh en arrière-plan. Dites à toutes les connexions SSH suivantes d'utiliser le même fichier socket.Il est possible de tout faire en une seule
ssh
connexion / session:Cette:
local_src
versremote_dst
,command
,remote_src
verslocal_dst
.Mais si on
command
écrit dessusstdout
, le résultat sera également au rendez-vouslocal_dst
. Sicommand
lit l'entrée destdin
, il recevra etEOF
.la source
Bien que vous puissiez le faire dans une seule session ssh, il est un peu difficile de combiner la copie de fichiers avec des commandes en cours d'exécution.
La façon la plus simple de s'attaquer à cette tâche consiste à exécuter des sessions SSH distinctes pour les trois opérations:
Cela nécessite une authentification trois fois sur machineB. La méthode recommandée pour éviter de s'authentifier plusieurs fois consiste à utiliser la fonction de partage de connexion dans les versions modernes d'OpenSSH: démarrez une connexion principale à B une fois pour toutes et laissez SSH se superposer automatiquement à cette connexion principale. Ajoutez
ControlMaster auto
uneControlPath
ligne à votre~/.ssh/config
, puis démarrez une connexion principale en arrière-plan, puis effectuez vos tâches.Plutôt que d'utiliser scp ou rsync pour copier des fichiers, il peut être plus facile de monter le système de fichiers distant sous SSHFS . Soit dit en passant, cela permettra de configurer une connexion principale (en supposant que vous avez configuré votre connexion
~/.ssh/config
comme indiqué ci-dessus).la source