Wie übergebe ich eine Schlüsseldatei, wenn ich einen ssh-Befehl aus node.js spawne?

Das funktioniert von meinem lokalen Terminal aus:

ssh -i ~/.ec2/mykey.pem [email protected] ls

Natürlich tut es das. Aber wenn ich das gleiche mit node.js versuchechild_process.spawn Befehl beschwert sich, dass der Schlüssel nicht vorhanden ist / nicht zugegriffen werden kann.

// child process
var childProcess = require('child_process').spawn;

// spawn the slave using slaveId as the key
slaves[slaveId] = childProcess('ssh', [
    '-i /mykey.pem',
    '[email protected]',
    'ls'
])  

Ergebnis:

stderr: Warning: Identity file  /mykey.pem not accessible: No such file or directory.  
stderr: Permission denied (publickey).

Dinge versucht:

Variationen auf dem Weg zum Schlüssel:
/actual/path/to/mykey.pem
mykey.pem (mit einer Kopie der Datei im Stammverzeichnis des Knotenprojekts)
/mykey.pem (mit einer Kopie der Datei im Stammverzeichnis des Knotenprojekts)
~/.ec2.mykey.pem (wo sollte es sein)

Ausführen des Befehls ohne den SSH-Teil, dh.childProcess(ls); - funktioniert.

chmod 644, 600, 400 etc. mykey.pem

Meine einzige Theorie zu diesem Zeitpunkt ist, dass es ein Problem mit der Übergabe eines Dateiverweises gibt, und das muss ich tunetwas mit dem fs-modul. (?) Und ja, ich weiß, dass es Bibliotheken für den SSH-Zugriff mit Node gibt, aber sie verwenden Passwörter, die es nicht schaffen, und meine Anforderungen rechtfertigen eine Bibliothek auch nicht wirklich.

Bitte sag mir, dass ich dumm bin und dass das möglich ist.

AKTUALISIEREN:

OK, also ichkönnen benutze den exec Befehl wie folgt:

var childProcess = require('child_process').exec;
slaves[slaveId] = childProcess('ssh -i mykey.pem [email protected] ls',  function (error, stdout, stderr) {...}

Trotzdem habe ich das Gefühl, von der Erstellung eines echten Sklaven mit herabgestuft worden zu seinfork Mit all den netten Nachrichten und praktischen Eigenschaften (meine ursprüngliche Implementierung, die lokal einwandfrei funktioniert) muss man einen Staubsauger haben und die ganze Arbeit selbst erledigen (jetzt, wo ich Slaves auf Remote-Hosts starten möchte).

Antworten auf die Frage(1)

Ihre Antwort auf die Frage