Я использую пакет org / x / crypto / s sh для сборки приложения cli на s sh через бастион к серверу с использованием сертификатов s sh. Basi c рабочий процесс есть; Инструмент Cli получает пользовательский ключ publi c и подписывает его из хранилища sh ca, и полученный сертификат используется для аутентификации пользователя на серверах. Это работало нормально.
configure := &ssh.ClientConfig{
User: "ec2-user",
Auth: []ssh.AuthMethod{
// Use the PublicKeys method for remote authentication.
ssh.PublicKeys(certSigner),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
//log.Println(config.bastionserver.publicIP)
// Connect to the remote server and perform the SSH handshake.
proxyClient, err := ssh.Dial("tcp", net.JoinHostPort(config.bastion.publicIP, "22"), configure)
if err != nil {
log.Fatalln(err)
}
session, err := proxyClient.NewSession()
if err != nil {
log.Fatalln(err)
}
defer session.Close()
if err = session.Shell(); err != nil {
log.Fatalln(err)
}
session.Wait()
Я внес некоторые изменения и вернулся к коду, и я начал получать следующую ошибку. Я использовал git для возврата.
s sh: сбой рукопожатия: s sh: невозможно аутентифицировать, предприняты методы [publickey нет], не поддерживаются поддерживаемые методы
Итак, я уменьшил сложность и попробовал следующий блок, чтобы попытаться подключиться только к бастиону через приложение cli, которое я создаю.
cmd := exec.Command("ssh", "-i", signedKeyPath, "-i", privateKeyPath, "ec2-user@host")
fmt.Println(cmd.String())
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
log.Fatalln(err)
}
все еще он выходит с
/ usr / bin / s sh -i /home/rochana/.ssh/id_rsa-cert.pub -i / home /rochana/.ssh/id_rsa ec2-user@host ec2-user@host: В доступе отказано (publickey, gssapi-keyex, gssapi-with-mi c). 2020-02-17 11: 01: 25.168548 I | статус выхода 255.
Я попытался скомпилировать и запустить его на другом P C, и я получил те же результаты. Я попытался сохранить сертификат на диск и указать путь.
, но если я выполню ту же команду на терминале. Он отлично работает и подключается к экземпляру.
s sh -i ~ / .ssh / id_rsa-cert.pub -i ~ / .ssh / id_rsa ec2-user@host
или просто скопируйте и вставьте вывод cmd.String ()
/ usr / bin / s sh -i /home/rochana/.ssh/id_rsa-cert.pub -i /home/rochana/.ssh/id_rsa ec2-user@host
все работает нормально, когда я запускаю прямо на терминале, но не с exe c, команда