Как передать ключевой файл при порождении команды ssh из node.js?
Это работает с моего локального терминала:
ssh -i ~/.ec2/mykey.pem [email protected] ls
Конечно, это так. Но когда я пытаюсь сделать то же самое, используя node.js child_process.spawn
Команда жалуется, что ключ не существует / может 'т быть доступным.
// 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'
])
Результат:
stderr: Warning: Identity file /mykey.pem not accessible: No such file or directory.
stderr: Permission denied (publickey).
Вещи пытались:
Вариации на пути к ключу:/actual/path/to/mykey.pem
mykey.pem
(с копией файла в корне узла проекта)/mykey.pem
(с копией файла в корне узла проекта)~/.ec2.mykey.pem
(где это должно быть)
Выполнение команды без ssh-части, т.е.childProcess(ls);
- работает.
chmod 644, 600, 400 etc. mykey.pem
Моя единственная теория на данный момент: есть проблема с передачей ссылки на файл, и мне нужно сделатьчто-то используя модуль fs. (?) И да, я знаю, что есть библиотеки для доступа по SSH с узлом, но они используют пароли, которые выигралине сокращайте это и так или иначе, мои требования неЭто действительно оправдывает библиотеку.
Пожалуйста, скажи мне, что яЯ глуп и что это возможно.
ОБНОВИТЬ:
Хорошо, так что яМожно используйте команду exec следующим образом:
var childProcess = require('child_process').exec;
slaves[slaveId] = childProcess('ssh -i mykey.pem [email protected] ls', function (error, stdout, stderr) {...}
Тем не менее, я чувствую, что ябыл понижен от создания настоящего раба, используяfork
со всем этимПриятные сообщения и удобные свойства (моя первоначальная реализация, которая работает локально), позволяющая иметь пылесос и получать всю работу самостоятельно (теперь я хочу запускать ведомые на удаленных хостах).