
Alexey
23.01.2018
14:32:59
при этом выполняет очень значительную роль
Есть еще вопрос
При авторизации в первый раз по ssh, к неизвестному еще хосту выходит такое

Google

Alexey
23.01.2018
14:42:10
Это как то можно в го считать и типа согласиться добавить в список ключей?

Ivanov
23.01.2018
14:43:26
по expect можно)

Alexey
23.01.2018
14:44:27
по expect можно)
Что это? Или ты имел ввиду except? В питоне?) В питоне то я уже давно такое реализовал без проблем

John
23.01.2018
14:44:30

Alexey
23.01.2018
14:45:15

Ivanov
23.01.2018
14:45:21
нет. https://habrahabr.ru/company/ruvds/blog/328436/ вот это имел ввиду
https://github.com/google/goexpect
а вот фича которая переносит это в го

Alexey
23.01.2018
14:46:36
Блин, а чистый го не? stdin, stdout?
это вообще возможно как то?
Я просто что только уже не пробовал

Ivanov
23.01.2018
14:47:05
ну если гугл написал для этого либу, то я не думаю что в го есть по дефолту

John
23.01.2018
14:47:12
Я пробовал, но как понял в том пакете нужно чтобы ключи уже были в файое ida_rsa
мм... не понял. Если в go используешь пакет ssh, то при коннекте ты создаешь конфиг, типа такого:
conf := &ssh.ClientConfig{
User: auth.GetUsername(),
Auth: methods,
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
Timeout: dialerSSHTimeout,
}
HostKeyCallback, и тебе туда придет имя хоста, и его ключ. Ну и дальше делай что хочешь )

Google

Alexander
23.01.2018
14:48:14
С коммандной строки вроде работает ssh -i /dev/null

Alexey
23.01.2018
14:48:19
Эм, а разве коллбеку не нужно явно передавать?

John
23.01.2018
14:48:39

Alexey
23.01.2018
14:49:35
Ну так если ключ явно передавать, то его знать нужно заранее, а я то хз что ща попадется
Я об этом
Или я не до конца понял работу callback?

John
23.01.2018
14:50:32
локальные ключи, естественно, читай сам :)

Alexey
23.01.2018
14:51:41
смотри
Вот этот ключ мне нужно принять и продолжить работу

John
23.01.2018
14:52:01
Вот, это ключ удаленного сервера

Alexey
23.01.2018
14:52:09
Да я понял
То что ты мне написал в коллбек

John
23.01.2018
14:52:46
если хочешь так же в go сделать, выведи ключ который тебе пришел на экран, и прочитай ввод от пользователя, что мол Yes/no
и если no - верни какой-то error

Alexey
23.01.2018
14:53:22
Типа Openssh7.4-Ubuntu

Ivanov
23.01.2018
14:53:46
Если я правильно понял ему нужно этот "yes" иметировать

Alexey
23.01.2018
14:53:53
10.1

Google

Alexey
23.01.2018
14:54:03

Ivanov
23.01.2018
14:54:15
так я выше написал как этто сделать

John
23.01.2018
14:55:00

Alexey
23.01.2018
14:55:03

John
23.01.2018
14:55:03
а тут все нативно :)

Alexey
23.01.2018
14:55:29
очень странно
Это не странно, это нормально везде так, сервис отправляет свой баннер
Вот я и не могу найти решение) Даже в x/ssh пакете не решен этот вопрос
Вот и хочу сам сделать как то

John
23.01.2018
14:57:25

Alexey
23.01.2018
14:57:35

John
23.01.2018
14:58:41

Alexey
23.01.2018
14:59:19
Да не
Код
Вот проверь тут например

John
23.01.2018
15:00:04
кусок модуля
выдирать - лень

Alexey
23.01.2018
15:00:29
64.119.128.157

Google

Alexey
23.01.2018
15:03:40
Че то странно

John
23.01.2018
15:03:51

Alexey
23.01.2018
15:04:08
Ок, попробую тогда
Просто я думал callback принимает параметры, в том числе и ключ, но никак не читает его

John
23.01.2018
15:06:08

Stanislav
23.01.2018
15:06:43

Alexey
23.01.2018
15:07:11
Да не, ты не понял, допустим я из файла уже сохраненный передал и он его дальше, а не читать от стороннего ресурса
Стоп
То что ты дал

Admin
ERROR: S client not available

John
23.01.2018
15:08:40

Alexey
23.01.2018
15:09:10
Это не приватный, а наоборот паблик хост кей
Короч ладно
Смотри
conf := &ssh.ClientConfig{
User: auth.GetUsername(),
Auth: methods,
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
log.Debug(d, "HostKeyCallback: %s %s [%s]", hostname, remote, key)
return nil
},
Timeout: dialerSSHTimeout,
}
return conf, nil
return c, nil
тут вот метод аутентификации у меня по паролю

John
23.01.2018
15:10:17

Alexey
23.01.2018
15:10:26
А user
не
либа гугл не подходит нифига

Google

Alexey
23.01.2018
15:10:43
Я уже что только не делал
Не то

John
23.01.2018
15:10:57
Хз, у меня все работает как нужно :)

Alexey
23.01.2018
15:11:27
Ну как отдельно? Просто юзернейм же

John
23.01.2018
15:11:34
получается, у тебя есть сам user, и есть методы, с помощью которых он проходит авторизацию
например, пароль, ключ, и тд ...

Alexey
23.01.2018
15:11:54
Ну это ясно
но у меня публичный ключ + пароль
Вот я об этом

John
23.01.2018
15:12:48
ну, добавь их в методы при коннекте - https://godoc.org/golang.org/x/crypto/ssh#AuthMethod

Alexey
23.01.2018
15:12:49
Мне нужно, чтобы мой клиент считал публичный ключ, сохранил его

John
23.01.2018
15:13:56

Alexey
23.01.2018
15:14:38
Ну когда первое подключение, он его один раз передает как идентификатор, после уже хранится в файле и не нужен

John
23.01.2018
15:16:31
точно так же и от сервера, ты всегда получаешь его ключ, но на второй раз ты можешь его просто проверить, НЕ сохраняя

Alexey
23.01.2018
15:17:34
да

John
23.01.2018
15:19:50
а что бы его проверить ... тебе нужно заранее прочитать тот файл, куда ты сохранил ключ с первого раза :))
ну или читать там же, но сам факт, делать это самому
Вроде так

Alexey
23.01.2018
15:21:24
ну да, сверяю, если есть то подключаемся, если нет, то добавляем

Alexander
23.01.2018
15:21:40
Если ты первый раз его сохраняешь и используешь просто без вопросов, то зачем его вообще сохранять? Второй раз так же бери ключ, который дали и используй его. Или таки проверка нужна? Тогда первый раз подтверждение надо спрашивать, так же как ssh делает