Я могу SSH (используя клиент openssh) подключиться к своему серверу, используя два файла: ~/.ssh/id_ed25519{,-cert.pub}
debug1: Trying private key: /home/xavier/.ssh/id_ed25519
debug1: Authentications that can continue: publickey,keyboard-interactive
debug1: Offering ED25519-CERT public key: /home/xavier/.ssh/id_ed25519
debug1: Server accepts key: pkalg [email protected] blen 441
debug1: sign_and_send_pubkey: no separate private key for certificate "/home/xavier/.ssh/id_ed25519"
debug1: Authentication succeeded (publickey).
Мне нужен клиент go, который делает то же самое, но я не знаю, как включить файл id_ed25519-cert.pub
в пример по адресу https://godoc.org/golang.org/x/crypto/ssh.#example-PublicKeys
key, err := ioutil.ReadFile("/home/xavier/.ssh/id_ed25519")
if err != nil {
log.Fatalf("unable to read private key: %v", err)
}
// Create the Signer for this private key.
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
log.Fatalf("unable to parse private key: %v", err)
}
config := &ssh.ClientConfig{
User: "user",
Auth: []ssh.AuthMethod{
// Use the PublicKeys method for remote authentication.
ssh.PublicKeys(signer),
},
}
// Connect to the remote server and perform the SSH handshake.
client, err := ssh.Dial("tcp", "host.com:22", config)
if err != nil {
log.Fatalf("unable to connect: %v", err)
}
defer client.Close()
Часть проблемы в том, что я не знаю, что это за файл (PublicKey? Сертификат?), часть проблемы в том, что даже если бы я знал, я не понимаю, какую цель он играет в этом обмене.
Я подтвердил, что этот файл необходим: его удаление приводит к сбою интерфейса командной строки ssh.
pub
— это открытый ключ, подписанный ЦС, о котором знает сервер. На сервере нет файлаauthorized_keys
, как можно было бы ожидать в типичной настройке SSH. Вместо этого он сверяет открытый ключ, предоставленный клиентом, с этим ЦС. Я до сих пор не знаю, как написать соответствующий код go;) - person Xavier Shay   schedule 01.09.2018ssh
библиотеку вы используете? - person Cosmic Ossifrage   schedule 02.09.2018