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).