Node.js - команды оболочки exec с инициализацией .bashrc - PullRequest
1 голос
/ 10 июня 2019

Я пишу небольшую утилиту для разработки для синхронизации файлов через ssh.Обычно я использую ssh-agent, настроенный в файле .bashrc, чтобы легко подключаться к моему dev-серверу.Я хотел бы использовать exec в сценарии, но вызов ssh-agent, каждый раз, когда я делаю запрос, звучит немного неоптимально.

Есть ли способ, которым я мог бы выполнить код агента один раз, а затем получить егоработает для всех последующих запросов SSH, я делаю?Например, чтобы вызвать процесс оболочки, такой как эмулятор терминала, и затем использовать этот процесс для выполнения команды, а не вызывать новую оболочку с каждой командой.

Причина, по которой я хочу это сделать, заключается в том, что я нехотите сохранить пароль в конфигурационном файле.

1 Ответ

1 голос
/ 10 июня 2019

Вы можете создать один процесс ssh, а затем выполнить другие команды, используя тот же процесс. Вот пример, как использовать его для bash. Я создаю новую оболочку bash и выполняю команды ls -la и exit, вы можете выполнять другие команды.

const cp = require("child_process")

class MyShell {
  constructor(command) {
    this._spawned = cp.spawn(command, {
      stdio: ["pipe", "pipe", "inherit"],
    })
  }
  execute(command, callback) {
    this._spawned.stdin.write(command + "\n")
    this._spawned.stdout.on("data", (chunk) => {
      if (callback) {
        callback(chunk.toString())
      }
    })
  }
}

var myShell = new MyShell("bash")
myShell.execute("ls -la", (result) => {
  console.log(result)
})
myShell.execute("exit")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...