367 Stimmen

ssh dazu bringen, einen Befehl im Hintergrund auf dem Zielrechner auszuführen

Dies ist eine Folgefrage zur Frage Wie verwendet man ssh in einem Shell-Skript? Frage. Wenn ich auf dem entfernten Rechner einen Befehl ausführen möchte, der auf diesem Rechner im Hintergrund läuft, wie bekomme ich dann den ssh-Befehl zurück? Wenn ich versuche, einfach das kaufmännische Und (&) am Ende des Befehls einzufügen, bleibt er einfach hängen. Die genaue Form des Befehls sieht wie folgt aus:

ssh user@target "cd /some/directory; program-to-execute &"

Irgendwelche Ideen? Eine Sache, die zu beachten ist, ist, dass Logins auf dem Zielcomputer immer ein Textbanner erzeugen und ich habe SSH Die Tasten sind so eingerichtet, dass kein Passwort erforderlich ist.

-2voto

Kevin Duterne Punkte 23

Gehen Sie zunächst wie folgt vor:

Melden Sie sich bei A als Benutzer a an und erzeugen Sie ein Paar von Authentifizierungsschlüsseln. Geben Sie keine Passphrase ein:

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

Verwenden Sie nun ssh, um ein Verzeichnis ~/.ssh als Benutzer b auf B zu erstellen. (Das Verzeichnis kann bereits existieren, was kein Problem darstellt):

a@A:~> ssh b@B mkdir -p .ssh
b@B's password: 

Hängen Sie schließlich den neuen öffentlichen Schlüssel von a an b@B:.ssh/authorized_keys an und geben Sie ein letztes Mal das Passwort von b ein:

a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'
b@B's password: 

Von nun an können Sie sich bei B als b von A als a ohne Passwort anmelden:

a@A:~> ssh b@B

dann funktioniert dies ohne Eingabe eines Passworts

ssh b@B "cd /some/Verzeichnis; auszuführendes Programm &"

-3voto

MLSC Punkte 5564

Ich glaube, das ist es, was Sie brauchen: Als erstes müssen Sie Folgendes installieren sshpass auf Ihrem Rechner. dann können Sie Ihr eigenes Skript schreiben:

while read pass port user ip; do
sshpass -p$pass ssh -p $port $user@$ip <<ENDSSH1
    COMMAND 1
    .
    .
    .
    COMMAND n
ENDSSH1
done <<____HERE
    PASS    PORT    USER    IP
      .      .       .       .
      .      .       .       .
      .      .       .       .
    PASS    PORT    USER    IP    
____HERE

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