Я только начал использовать Go, и я пытаюсь настроить соединение s sh через хост-бастион, я успешно аутентифицируюсь на хосте-бастион, но на хосте локальной сети произошел сбой. Я прочитал несколько постов, ответ на этот , я нашел очень полезным. Но я не уверен, что было бы в этой конфигурации лиц. Мой код выглядит следующим образом. Я пытаюсь сделать только с PublicKeys, и если это важно, я начинаю на ма c, аутентифицируюсь на linux, затем не могу установить второе соединение с другим linux хостом. Обычный s sh работает отлично
package main
import (
"fmt"
"golang.org/x/crypto/ssh"
"io/ioutil"
"log"
"os/user"
)
const TCP = "tcp"
const PORT = "22"
func bastionConnect(bastion string, localh string) *ssh.Client {
var usr, _ = user.Current()
var homeDir = usr.HomeDir
fmt.Printf("home is %v\n", homeDir)
key, err := ioutil.ReadFile(homeDir + "/.ssh/id_rsa")
if err != nil {
fmt.Print("i'm dying at reading ssh key")
panic(err)
}
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
fmt.Print("i'm dying at parsing private key")
panic(err)
}
fmt.Printf("I'm returning public keys for %v", signer.PublicKey())
config := &ssh.ClientConfig{
User: usr.Username,
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
Auth: []ssh.AuthMethod{
ssh.PublicKeys(signer),
},
}
bClient, err := ssh.Dial(TCP, bastion+":22", config)
if err != nil {
log.Fatal(err)
}
fmt.Print("passed bastion host\n")
// Dial a connection to the service host, from the bastion
conn, err := bClient.Dial(TCP, fmt.Sprintf("%s:%s", localh, PORT))
if err != nil {
log.Fatal(err)
}
ncc, chans, reqs, err := ssh.NewClientConn(conn, fmt.Sprintf("%s:%s", localh, PORT), config)
if err != nil {
fmt.Printf("Error trying to conntect to %s via bastion host\n%v\n", localh, err)
log.Fatal(err)
}
sClient := ssh.NewClient(ncc, chans, reqs)
return sClient
}
func main() {
var bastion = "jumpdev.example.org"
var lanHost = "devserver01"
bastionConnect(bastion, lanHost)
}
Последняя строка журнала, которую я вижу, Error trying to connect to devserver01 via bastion host
с ошибкой
2020/02/03 14:40:17 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]
Простите все Printfs, необходимые, чтобы увидеть, что случилось. Во втором соединении может быть испорчена конфигурация ключа publi c? Я также проверил этот проект , но кажется излишним.