[PYTHON] Führen Sie ein lokales Skript auf einem Remote-Host aus

Überblick

Führen Sie Bash- und Python-Skripte ohne Änderungen und ohne Kopieren von Dateien aus der Ferne aus.

Einzelheiten

Ich möchte ein solches Skript ausführen

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

Grundidee

1. Mit ssh können Sie ein Skript an stdin einer Remote-Shell senden.

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

2. bash kann den Inhalt von stdin als Datei empfangen

$ 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. Mit der hier beschriebenen Dokumentation können Sie Skripte ausführen, ohne eine Datei zu erstellen

$ 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

Implementierung

Ein solches Skript

rdosh.sh


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

Experiment

$ ./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

erledigt

Python auch

Ein solches Skript

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 hat auch funktioniert

$ ./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

Führen Sie ein lokales Skript auf einem Remote-Host aus
Führen Sie Jupyter Notebook auf einem Remote-Server aus
Führen Sie ein mehrzeiliges Skript in einem PDB aus
Führen Sie einen Linux-Server mit GCP aus
Führen Sie Matplotlib auf einem Docker-Container aus
Führen Sie Headless-Chrome auf einem Debian-basierten Image aus
Führen Sie TensorFlow2 auf dem VPS-Server aus
Führen Sie den Python-Interpreter im Skript aus
Führen Sie Python-Code in der A2019 Community Edition aus
Verwenden Sie Django aus einem lokalen Python-Skript
Lassen Sie uns das Bash-Skript in Java ausführen
Führen Sie matplotlib in einem Windows Docker-Container aus
So führen Sie Maya Python-Skripte aus
Führen Sie Python-Dateien in einem Docker-Container auf einem Remote-Raspbian über PyCharm aus
Janken Poi mit Python Lassen Sie uns für Anfänger auf einem lokalen Windows-Server laufen
Führen Sie Python-Skripte in C # -GUI-Anwendungen aus
Erstellen Sie eine LAMP-Umgebung auf Ihrem lokalen Docker
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
Führen Sie Python-Skripte in Excel aus (mit xlwings).
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
So führen Sie Django unter IIS auf einem Windows-Server aus
Führen Sie Django auf PythonAnywhere aus
Führen Sie mysqlclient auf Lambda aus
Führen Sie OpenMVG auf einem Mac aus
Erstellen Sie eine neue CSV mit Pandas basierend auf der lokalen CSV
So führen Sie ein geschultes Transformatormodell lokal auf CloudTPU aus
So führen Sie ein Python-Programm in einem Shell-Skript aus
Führen Sie eine begrenzte Anzahl von Bildpräsentationsprogrammen auf PsychoPy aus
Erstellen Sie ein Python-Skript für Wake on LAN (Wake on LAN über NAT [5])
Führen Sie den Ausgabecode auf dem lokalen Webserver in Python als "A, gibt vor, B zu sein" aus