Jak przekazać plik klucza podczas wywoływania polecenia ssh z node.js?

Działa to z mojego lokalnego terminala:

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

Oczywiście, że tak. Ale kiedy próbuję tego samego, używając node.js 'child_process.spawn polecenie narzeka, że ​​klucz nie istnieje / nie można uzyskać do niego dostępu.

// 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'
])  

Wynik:

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

Rzeczy się starały:

Wariacje na ścieżce do klucza:
/actual/path/to/mykey.pem
mykey.pem (z kopią pliku w katalogu głównym projektu węzła)
/mykey.pem (z kopią pliku w katalogu głównym projektu węzła)
~/.ec2.mykey.pem (gdzie powinno być)

Uruchomienie polecenia bez części ssh, tj.childProcess(ls); - Prace.

chmod 644, 600, 400 etc. mykey.pem

Moją jedyną teorią w tym momencie jest problem z przekazaniem odwołania do pliku i muszę to zrobićcoś za pomocą modułu fs. (?) I tak, wiem, że istnieją biblioteki do dostępu ssh z węzłem, ale używają haseł, które go nie wycinają, a poza tym moje wymagania tak naprawdę nie usprawiedliwiają biblioteki.

Proszę mi powiedzieć, że jestem głupi i że to możliwe.

AKTUALIZACJA:

OK, więc jamogą użyj polecenia exec w ten sposób:

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

Mimo to czuję się, jakbym został obniżony z tworzenia prawdziwego niewolnikafork ze wszystkimi ładnymi wiadomościami i przydatnymi właściwościami (moja oryginalna implementacja działa dobrze lokalnie) na posiadanie odkurzacza i powiedziano mi, żeby sam wykonał całą pracę (teraz, gdy chcę uruchamiać urządzenia podrzędne na zdalnych hostach).

questionAnswers(1)

yourAnswerToTheQuestion