1436 Stimmen

Wie kann man SSH verwenden, um ein lokales Shell-Skript auf einem entfernten Rechner auszuführen?

Ich muss ein lokales Shell-Skript (Windows/Linux) auf einem entfernten Rechner ausführen.

Ich habe SSH sowohl auf Rechner A als auch auf Rechner B konfiguriert. Mein Skript befindet sich auf Rechner A, der einen Teil meines Codes auf einem entfernten Rechner, Rechner B, ausführen wird.

Die lokalen und entfernten Computer können entweder Windows- oder Unix-basierte Systeme sein.

Gibt es eine Möglichkeit, dies mit plink/ssh zu tun?

7 Stimmen

Die gleiche Frage wurde bereits auf serverfault gestellt: serverfault.com/questions/215756/ Es hat also wahrscheinlich keinen Sinn, diese Frage zu migrieren.

9 Stimmen

Auf die Frage zu Server Fault gibt es allerdings nicht so viele Antworten. Vielleicht sollte diese Frage diese ersetzen.

5 Stimmen

Mir persönlich gefällt diese Antwort: unix.stackexchange.com/questions/87405/

7voto

Ankush Sahu Punkte 520
ssh user@hostname ".~/.bashrc;/cd path-to-file/;.filename.sh"

Es wird dringend empfohlen, die Umgebungsdatei (.bashrc/.bashprofile/.profile) zu erstellen, bevor Sie etwas auf dem entfernten Host ausführen, da die Umgebungsvariablen des Ziel- und des Quellhosts unterschiedlich sein können.

0 Stimmen

Hier wird nicht erklärt, wie man ein lokales Skript auf den entfernten Rechner verschiebt.

0 Stimmen

Es scheint, dass ein Leerzeichen vor ~/.bashrc fehlt

5voto

Is Ma Punkte 804

Ich verwende dieses Programm, um ein Shell-Skript auf einem entfernten Rechner auszuführen (getestet mit /bin/bash):

ssh deploy@host . /home/deploy/path/to/script.sh

4voto

KamilCuk Punkte 94675

Wenn das Skript kurz ist und in Ihr Skript eingebettet werden soll und Sie unter bash Schale und auch bash Shell auf der entfernten Seite verfügbar ist, können Sie declare um den lokalen Kontext an die Gegenstelle zu übertragen. Definieren Sie Variablen und Funktionen, die den Zustand enthalten, der an die Gegenstelle übertragen werden soll. Definieren Sie eine Funktion, die auf der entfernten Seite ausgeführt werden soll. Dann in einem here-Dokument, das von bash -s können Sie declare -p um die Variablenwerte zu übertragen, und verwenden Sie declare -f um Funktionsdefinitionen an die Fernbedienung zu übertragen.

Denn declare kümmert sich um die Anführungszeichen und wird von der entfernten Seite geparst bash werden die Variablen richtig zitiert und die Funktionen richtig übertragen. Sie können das Skript einfach lokal schreiben, normalerweise mache ich eine lange Funktion mit der Arbeit, die ich auf der entfernten Seite machen muss. Der Kontext muss von Hand ausgewählt werden, aber die folgende Methode ist "gut genug" für alle kurzen Skripte und ist sicher - sollte alle Eckfälle richtig behandeln.

somevar="spaces or other special characters"
somevar2="!@#$%^"
another_func() {
    mkdir -p "$1"
}
work() {
    another_func "$somevar"
    touch "$somevar"/"$somevar2"
}
ssh user@server 'bash -s' <<EOT
$(declare -p somevar somevar2)    # transfer variables values
$(declare -f work another_func)   # transfer function definitions
work                              # call the function
EOT

2voto

Mohammed Rafeeq Punkte 2380

Dieses Bash-Skript verbindet sich mit einem entfernten Zielrechner und führt einige Befehle auf dem entfernten Rechner aus. Vergessen Sie nicht, expect zu installieren, bevor Sie es ausführen (auf Mac brew install expect )

#!/usr/bin/expect
set username "enterusenamehere"
set password "enterpasswordhere"
set hosts "enteripaddressofhosthere"
spawn ssh  $username@$hosts
expect "$username@$hosts's password:"
send -- "$password\n"
expect "$"
send -- "somecommand on target remote machine here\n"
sleep 5
expect "$"
send -- "exit\n"

1 Stimmen

Das ist großartig, wenn Sie Passwörter verwenden müssen ... aber zum Vorteil aller, die zu Hause zusehen, sollte jeder ssh-Befehl ein Paar öffentlicher+privater Schlüssel und keine Passwörter verwenden ... sobald das eingerichtet ist, aktualisieren Sie Ihren ssh-Server, um Passwörter ganz abzuschalten

2voto

nowat Punkte 110

Sie können verwenden überlaufend :

sudo apt install runoverssh

runoverssh -s localscript.sh user host1 host2 host3...

-s führt ein lokales Skript ferngesteuert aus


Nützliche Flaggen:
-g ein globales Kennwort für alle Hosts verwenden (einzige Kennwortabfrage)
-n SSH anstelle von sshpass verwenden, nützlich für die Authentifizierung mit öffentlichen Schlüsseln

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X