Exécuter un script local sur un hôte distant

Aperçu

Exécutez à distance des scripts bash et python sans modification et sans copier de fichiers.

Détails

Je veux exécuter un tel script

sample.sh


#!/bin/bash

for arg in init ${@};do
    echo "$(date +%Y-%m-%dT%H:%M:%S) $(hostname) ${arg}"
    sleep 1
done
$ ./sample.sh a b c
2015-12-22T11:30:26 local-host init
2015-12-22T11:30:27 local-host a
2015-12-22T11:30:28 local-host b
2015-12-22T11:30:29 local-host c

Idée basique

1. Avec ssh, vous pouvez soumettre un script à stdin d'un shell distant.

$ cat sample.sh | ssh user@remote-host
2015-12-22T11:31:43 remote-host init

2. bash peut recevoir le contenu de stdin sous forme de fichier

$ cat sample.sh | bash <(cat -) a b c
2015-12-22T11:33:47 local-host init
2015-12-22T11:33:48 local-host a
2015-12-22T11:33:49 local-host b
2015-12-22T11:33:50 local-host c

3. Si vous utilisez le document ici, vous pouvez exécuter le script sans créer de fichier.

$ cat << 'EOT' | bash <(cat -) a b c
> for arg in init ${@};do
>     echo "$(date +%Y-%m-%dT%H:%M:%S) $(hostname) ${arg}"
>     sleep 1
> done
> EOT
2015-12-22T11:40:17 local-host init
2015-12-22T11:40:18 local-host a
2015-12-22T11:40:19 local-host b
2015-12-22T11:40:20 local-host c

la mise en oeuvre

Un tel script

rdosh.sh


#!/bin/bash
echo -e "cat << 'EOT' | bash <(cat -) ${@:2}\n$(cat ${1}|sed -e 's/\\/\\\\/g')\nEOT"

Expérience

$ ./rdosh.sh sample.sh a b c | ssh user@remote-host
2015-12-22T11:42:48 remote-host init
2015-12-22T11:42:49 remote-host a
2015-12-22T11:42:50 remote-host b
2015-12-22T11:42:51 remote-host c

l'a fait

python aussi

Un tel script

sample.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
import time
for arg in ["init"]+sys.argv[1:]:
    sys.stdout.write("{0} {1} {2}\n".format(time.strftime("%Y-%m-%dT%H:%M:%S"),os.uname()[1],arg))
    sys.stdout.flush()
    time.sleep(1)

rdopy.sh


#!/bin/bash
echo -e "cat << 'EOT' | python <(cat -) ${@:2}\n$(cat ${1}|sed -e 's/\\/\\\\/g')\nEOT"

python a également fonctionné

$ ./sample.py a b c
2015-12-22T13:20:29 local-host init
2015-12-22T13:20:30 local-host a
2015-12-22T13:20:31 local-host b
2015-12-22T13:20:32 local-host c
$ ./rdopy sample.py a b c | ssh user@remote-host
2015-12-22T13:20:46 remote-host init
2015-12-22T13:20:47 remote-host a
2015-12-22T13:20:48 remote-host b
2015-12-22T13:20:49 remote-host c

Recommended Posts

Exécuter un script local sur un hôte distant
Exécuter le notebook Jupyter sur un serveur distant
Exécuter un script multiligne dans un PDB
Exécutez un serveur Linux avec GCP
Exécutez Matplotlib sur un conteneur Docker
Exécutez headless-chrome sur une image basée sur Debian
Exécutez TensorFlow2 sur le serveur VPS
Exécuter l'interpréteur Python dans le script
Exécutez le code Python sur A2019 Community Edition
Utiliser Django à partir d'un script Python local
Lançons le script Bash en Java
Exécutez matplotlib sur un conteneur Windows Docker
Comment exécuter des scripts Maya Python
Exécutez des fichiers Python dans un conteneur Docker sur un Raspbian distant via PyCharm
Janken Poi avec Python Exécutons sur un serveur local Windows pour les débutants
Exécuter des scripts Python à partir d'applications C # GUI
Créez un environnement LAMP sur votre Docker local
Exécutez régulièrement des programmes Python sur AWS Lambda
Exécutez des scripts Python à partir d'Excel (en utilisant xlwings)
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Un mémorandum pour exécuter un script python dans un fichier bat
Comment exécuter Django sur IIS sur un serveur Windows
Exécutez Django sur PythonAnywhere
Exécutez mysqlclient sur Lambda
Exécutez OpenMVG sur Mac
Créer un nouveau csv avec des pandas basé sur le csv local
Comment exécuter un modèle de transformateur entraîné localement sur CloudTPU
Comment exécuter un programme Python à partir d'un script shell
Exécutez un nombre limité de programmes de présentation d'images sur PsychoPy
Créer un script Python pour Wake on LAN (Wake on LAN over NAT [5])
Exécutez le code de sortie sur le serveur Web local en tant que "A, faisant semblant d'être B" en python