WeakBox требует, чтобы WeakArray < Element > .Element был типом класса

Вам нужно использовать ssh.PublicKeys, чтобы превратить список ssh.Signers в ssh.AuthMethod. Вы можете использовать ssh.ParsePrivateKey, чтобы получить Signer из байтов pem, или если вам нужно использовать закрытый ключ rsa, dsa или ecdsa, вы можете дать их ssh.NewSignerFromKey.

Вот Например, с помощью поддержки агента также немного скрестили (поскольку использование агента обычно является следующим шагом после простого использования файла ключа).

sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
if err != nil {
    log.Fatal(err)
}

agent := agent.NewClient(sock)

signers, err := agent.Signers()
if err != nil {
    log.Fatal(err)
}

// or get the signer from your private key file directly
// signer, err := ssh.ParsePrivateKey(pemBytes)
// if err != nil {
//     log.Fatal(err)
// }

auths := []ssh.AuthMethod{ssh.PublicKeys(signers...)}

cfg := &ssh.ClientConfig{
    User: "username",
    Auth: auths,
}
cfg.SetDefaults()

client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
if err != nil {
    log.Fatal(err)
}

session, err = client.NewSession()
if err != nil {
    log.Fatal(err)
}

log.Println("we have a session!")

...
1
задан Szymon W 17 January 2019 в 09:32
поделиться

1 ответ

Я верю, что «Элемент» где-то переопределяется SDK. Переименование элемента в T должно исправить проблему.

import Foundation

final class WeakBox<T:AnyObject> {
    weak var unbox: T?
    init(_ value: T?) {
        unbox = value
    }
}

struct WeakArray<T: AnyObject> {
    private var items: [WeakBox<T>] = []

    init(_ elements: [T]) {
        items = elements.map { WeakBox([110]) }
    }

    init(_ elements: [T?]) {
        items = elements.map { WeakBox([110]) }
    }

    mutating func append(_ obj:T?) {
        items.append(WeakBox(obj))
    }

    mutating func remove(at:Int) {
        items.remove(at: at)
    }
}

extension WeakArray: Collection {
    var startIndex: Int { return items.startIndex }
    var endIndex: Int { return items.endIndex }

    subscript(_ index: Int) -> T? {
        return items[index].unbox
    }

    func index(after idx: Int) -> Int {
        return items.index(after: idx)
    }
}
0
ответ дан Isaac Paul 17 January 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: