cmd: = exe c .Command ("s sh", "ec2-user@publicip") завершает работу с отказом в разрешении (publickey, gssapi-keyex, gssapi-with-mi c) - PullRequest
2 голосов
/ 17 февраля 2020

Я использую пакет 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, команда

1 Ответ

0 голосов
/ 20 февраля 2020

Ошибка произошла из-за того, что сервер Vault не смог синхронизировать c своего времени.

...