Go exec.Command зависает на StrictHostKeyChecking = нет - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь подключиться к группе серверов, которые не поддерживают обычную оболочку.Библиотека / crypto / ssh не работает для них, поэтому я использую прямой ssh ​​через exec.Command.

Теперь проблема в том, что эта команда просто зависает, если я передаю -o StrictHostKeyChecking=no, то есть: exec.Command("ssh", "-o", "StrictHostKeyChecking=no", config.User + "@" + host)

, но работает для простого

exec.Command("ssh", "-T", config.User + "@" + host)

Полный блок кода здесь (ему просто нужно передать команду к ssh-соединению, например так:

echo hostname | ssh -T -o StrictHostKeyChecking=no user1@db1-ar6.name.local:

p1 := exec.Command("echo", config.Command)
p2 := exec.Command("ssh", "-o", "StrictHostKeyChecking=no", config.User + "@" + host)
//p2 := exec.Command("ssh", "-T", config.User + "@" + host) //doesn't work

fmt.Println(p2) //checking output

var stdout, stderr bytes.Buffer
p2.Stdout = &stdout
p2.Stderr = &stderr

p2.Stdin, _ = p1.StdoutPipe()       // p1 pipe to p2 ssh


err1 := p2.Start()  // start ssh command but dont wait for it to finish
if err1 != nil {
  return errors.Wrap(err1, "starting ssh session failed")
        }

err2 := p1.Run()    // run pipe command and wait for it to finish
if err2 != nil {
  return errors.Wrap(err2, config.Command+" failed", )
         }


err3 := p2.Wait()   // ssh wait for pipe to close
if err3 != nil {
  return errors.Wrap(err3, "ssh wait failed")
         }

Вывод есть, и ожиданиеСбой функции:

&{/usr/bin/ssh [ssh -o StrictHostKeyChecking=no user1@db1-ar6.name.local] []  <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> <nil> false [] [] [] [] <nil> <nil>}
2019/05/24 10:28:41 ssh wait failed: exit status 255
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...