本文整理汇总了Golang中golang.org/x/crypto/ssh.PublicKey类的典型用法代码示例。如果您正苦于以下问题:Golang PublicKey类的具体用法?Golang PublicKey怎么用?Golang PublicKey使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PublicKey类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Remove
// Remove removes all identities with the given public key.
func (r *keyring) Remove(key ssh.PublicKey) error {
r.mu.Lock()
defer r.mu.Unlock()
if r.locked {
return errLocked
}
want := key.Marshal()
found := false
for i := 0; i < len(r.keys); {
if bytes.Equal(r.keys[i].signer.PublicKey().Marshal(), want) {
found = true
r.keys[i] = r.keys[len(r.keys)-1]
r.keys = r.keys[len(r.keys)-1:]
continue
} else {
i++
}
}
if !found {
return errors.New("agent: key not found")
}
return nil
}
开发者ID:Clarifai,项目名称:kubernetes,代码行数:26,代码来源:keyring.go
示例2: findKeyLocally
func findKeyLocally(key ssh.PublicKey) (string, error) {
sshDir := os.Getenv("HOME") + "/.ssh"
dirEntries, err := ioutil.ReadDir(sshDir)
if err != nil {
return "", fmt.Errorf("Could not read your .ssh directory %s: %s\n", sshDir, err)
}
for idx := range dirEntries {
entry := dirEntries[idx]
if strings.HasSuffix(entry.Name(), ".pub") {
pubKeyPath := sshDir + "/" + entry.Name()
pubBuf, err := ioutil.ReadFile(pubKeyPath)
if err != nil {
fmt.Printf("Trouble reading public key %s: %s\n", pubKeyPath, err)
continue
}
pubKey, _, _, _, err := ssh.ParseAuthorizedKey(pubBuf)
if err != nil {
fmt.Printf("Trouble parsing public key %s (might be unsupported format): %s\n", pubKeyPath, err)
continue
}
if bytes.Equal(pubKey.Marshal(), key.Marshal()) {
return pubKeyPath, nil
}
}
}
return "", fmt.Errorf("Couldn't find ssh key for cert.\n")
}
开发者ID:rawdigits,项目名称:ssh-cert-authority,代码行数:27,代码来源:get_cert.go
示例3: pubkeyAuthCallback
func pubkeyAuthCallback(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
keyring.RLock()
defer keyring.RUnlock()
if keyring.Keys == nil {
log.Println("rejecting authentication due to missing keyring")
return nil, errors.New("no keyring available")
}
var keyFound *BenutzerDBKeyHandle
for _, k := range *keyring.Keys {
if k.ParsedPublicKey == nil {
continue
} else if bytes.Compare(key.Marshal(), k.ParsedPublicKey.Marshal()) == 0 {
keyFound = &k
break
}
}
if keyFound == nil {
log.Println("could not authenticate", conn.RemoteAddr().String(), " no key found")
return nil, errors.New("invalid authentication")
}
log.Println("accepted key for user:", keyFound.Handle)
return &ssh.Permissions{Extensions: map[string]string{"user_id": keyFound.Handle}}, nil
}
开发者ID:raumzeitlabor,项目名称:rzl-repaircafe,代码行数:27,代码来源:main.go
示例4: HostKeyCallback
func (k KnownHosts) HostKeyCallback(hostname string, remote net.Addr, key ssh.PublicKey) error {
var addr *net.TCPAddr
if v, ok := remote.(*net.TCPAddr); ok {
addr = v
} else {
return UnsupportedAddrType
}
keyBytes := key.Marshal()
var matched []*Host
for _, l := range k {
if l.CertAuthority {
continue
}
if key.Type() != l.PublicKey.Type() {
continue
}
lKeyBytes := l.PublicKey.Marshal()
for _, h := range l.Hosts {
if h.Match(hostname, addr) {
if !bytes.Equal(keyBytes, lKeyBytes) {
return HostKeyMismatchError
}
if l.Revoked {
return HostRevokedError
}
matched = append(matched, h)
}
}
}
if len(matched) == 0 {
return HostNotFoundError
}
return nil
}
开发者ID:ably-forks,项目名称:flynn,代码行数:34,代码来源:knownhosts.go
示例5: Authenticate
func (a *publicKeyAuthenticator) Authenticate(conn ssh.ConnMetadata, publicKey ssh.PublicKey) (*ssh.Permissions, error) {
if bytes.Equal(publicKey.Marshal(), a.marshaledPublicKey) {
return &ssh.Permissions{}, nil
}
return nil, errors.New("authentication failed")
}
开发者ID:benjaminharnett,项目名称:diego-ssh,代码行数:7,代码来源:public_key_authenticator.go
示例6: authorizeKey
func (ctrl *Controller) authorizeKey(conn ssh.ConnMetadata, key ssh.PublicKey) (
*ssh.Permissions, error) {
marshaledKey := key.Marshal()
for _, authorizedKey := range ctrl.authorizedKeys {
if bytes.Compare(authorizedKey.Marshal(), marshaledKey) == 0 {
return &ssh.Permissions{}, nil
}
}
nodes, err := ctrl.cluster.GetDir("console/authorized_keys")
if err != nil {
if err == cluster.ErrNotFound {
return nil, fmt.Errorf("unauthorized")
}
return nil, err
}
for path, value := range nodes {
key, _, _, _, err := ssh.ParseAuthorizedKey([]byte(value))
if err != nil {
fmt.Printf("bad authorized key from etcd: %s: %s\n", path, err)
}
if bytes.Compare(key.Marshal(), marshaledKey) == 0 {
return &ssh.Permissions{}, nil
}
}
return nil, fmt.Errorf("unauthorized")
}
开发者ID:logan,项目名称:heim,代码行数:30,代码来源:server.go
示例7: FingerprintKey
func FingerprintKey(k ssh.PublicKey) string {
bytes := md5.Sum(k.Marshal())
strbytes := make([]string, len(bytes))
for i, b := range bytes {
strbytes[i] = fmt.Sprintf("%02x", b)
}
return strings.Join(strbytes, ":")
}
开发者ID:bitcoinfees,项目名称:chisel,代码行数:8,代码来源:ssh.go
示例8: pubKeyFingerprint
func pubKeyFingerprint(key ssh.PublicKey) (string, error) {
h := md5.New()
_, err := h.Write(key.Marshal())
if err != nil {
return "", err
}
fp := fmt.Sprintf("%x", h.Sum(nil))
return fp, nil
}
开发者ID:nsimaria,项目名称:sectra,代码行数:9,代码来源:main.go
示例9: Remove
// Remove removes all identities with the given public key.
func (r *keyring) Remove(key ssh.PublicKey) error {
r.mu.Lock()
defer r.mu.Unlock()
if r.locked {
return errLocked
}
return r.removeLocked(key.Marshal())
}
开发者ID:Rudloff,项目名称:platform,代码行数:10,代码来源:keyring.go
示例10: Check
func (k *storedHostKey) Check(addr string, remote net.Addr, key ssh.PublicKey) error {
k.checkCount++
algo := key.Type()
if k.keys == nil || bytes.Compare(key.Marshal(), k.keys[algo]) != 0 {
return fmt.Errorf("host key mismatch. Got %q, want %q", key, k.keys[algo])
}
return nil
}
开发者ID:ReinhardHsu,项目名称:platform,代码行数:9,代码来源:test_unix_test.go
示例11: getFingerprint
func getFingerprint(key ssh.PublicKey) (fingerprint string) {
md5sum := md5.Sum(key.Marshal())
for i, c := range hex.EncodeToString(md5sum[:]) {
if i != 0 && i%2 == 0 {
fingerprint += ":"
}
fingerprint += string(c)
}
return
}
开发者ID:GowthamShanmugam,项目名称:skyring,代码行数:10,代码来源:ssh.go
示例12: logPubKey
/* logPubKey logs a public key attempt */
func logPubKey(
conn ssh.ConnMetadata,
key ssh.PublicKey,
) (*ssh.Permissions, error) {
log.Printf(
"%v Key(%v):%02X",
ci(conn),
key.Type(),
md5.Sum(key.Marshal()),
)
return nil, fmt.Errorf("invalid key")
}
开发者ID:magisterquis,项目名称:sshlowpot,代码行数:13,代码来源:sshlowpot.go
示例13: sshToCrypto
func sshToCrypto(pk ssh.PublicKey) crypto.PublicKey {
// Don't judge me, judge the ssh.PublicKey interface. And me. A bit.
switch pk.Type() {
case ssh.KeyAlgoRSA:
return (*rsa.PublicKey)(unsafe.Pointer(reflect.ValueOf(pk).Elem().UnsafeAddr()))
case ssh.KeyAlgoDSA:
return (*dsa.PublicKey)(unsafe.Pointer(reflect.ValueOf(pk).Elem().UnsafeAddr()))
case ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521:
return (*ecdsa.PublicKey)(unsafe.Pointer(reflect.ValueOf(pk).Elem().UnsafeAddr()))
default:
return nil
}
}
开发者ID:Tourountzis,项目名称:whosthere,代码行数:13,代码来源:db.go
示例14: authKey
// authKey records any incoming request trying to auth with an ssh key
func authKey(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
h := sha256.New()
h.Write(key.Marshal())
sum := h.Sum(nil)
log.Printf("sshkey: %s %s %s %s\n",
conn.RemoteAddr().String(),
conn.User(),
key.Type(),
base64.StdEncoding.EncodeToString(sum))
return nil, errAuthenticationFailed
}
开发者ID:gombadi,项目名称:simplessh,代码行数:14,代码来源:simplessh.go
示例15: Auth
func (s ScriptKeyAuth) Auth(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
cmd := exec.Command(config.KeyAuthLocation, conn.User(), conn.RemoteAddr().String())
k := fmt.Sprintf("%s\n", base64.StdEncoding.EncodeToString(key.Marshal()))
keyReader := bytes.NewReader([]byte(k))
cmd.Stdin = keyReader
output, err := cmd.CombinedOutput()
if err != nil {
config.Log.Error("key authentication: %s\n%v", output, err)
return nil, err
}
// nil permissions is success?
return nil, nil
}
开发者ID:Lanzafame,项目名称:butter,代码行数:14,代码来源:script.go
示例16: compareKeys
// compareKeys compares to key files and returns true of they match.
func compareKeys(a, b ssh.PublicKey) bool {
if a.Type() != b.Type() {
return false
}
// The best way to compare just the key seems to be to marshal both and
// then compare the output byte sequence.
return subtle.ConstantTimeCompare(a.Marshal(), b.Marshal()) == 1
}
开发者ID:soficom,项目名称:builder,代码行数:9,代码来源:sshd.go
示例17: Sign
// Sign returns a signature for the data.
func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
r.mu.Lock()
defer r.mu.Unlock()
if r.locked {
return nil, errLocked
}
wanted := key.Marshal()
for _, k := range r.keys {
if bytes.Equal(k.signer.PublicKey().Marshal(), wanted) {
return k.signer.Sign(rand.Reader, data)
}
}
return nil, errors.New("not found")
}
开发者ID:Clarifai,项目名称:kubernetes,代码行数:16,代码来源:keyring.go
示例18: Sign
func (a *Agent) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
wanted := key.Marshal()
signers, err := a.Signers()
if err != nil {
return nil, err
}
for _, signer := range signers {
if bytes.Equal(signer.PublicKey().Marshal(), wanted) {
log.Printf("Signing message: key=%s", ssh.MarshalAuthorizedKey(signer.PublicKey()))
return signer.Sign(rand.Reader, data)
}
}
return nil, ErrNotFound
}
开发者ID:kamronbatman,项目名称:macgyver,代码行数:16,代码来源:agent.go
示例19: testAgentInterface
func testAgentInterface(t *testing.T, agent Agent, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) {
signer, err := ssh.NewSignerFromKey(key)
if err != nil {
t.Fatalf("NewSignerFromKey(%T): %v", key, err)
}
// The agent should start up empty.
if keys, err := agent.List(); err != nil {
t.Fatalf("RequestIdentities: %v", err)
} else if len(keys) > 0 {
t.Fatalf("got %d keys, want 0: %v", len(keys), keys)
}
// Attempt to insert the key, with certificate if specified.
var pubKey ssh.PublicKey
if cert != nil {
err = agent.Add(AddedKey{
PrivateKey: key,
Certificate: cert,
Comment: "comment",
LifetimeSecs: lifetimeSecs,
})
pubKey = cert
} else {
err = agent.Add(AddedKey{PrivateKey: key, Comment: "comment", LifetimeSecs: lifetimeSecs})
pubKey = signer.PublicKey()
}
if err != nil {
t.Fatalf("insert(%T): %v", key, err)
}
// Did the key get inserted successfully?
if keys, err := agent.List(); err != nil {
t.Fatalf("List: %v", err)
} else if len(keys) != 1 {
t.Fatalf("got %v, want 1 key", keys)
} else if keys[0].Comment != "comment" {
t.Fatalf("key comment: got %v, want %v", keys[0].Comment, "comment")
} else if !bytes.Equal(keys[0].Blob, pubKey.Marshal()) {
t.Fatalf("key mismatch")
}
// Can the agent make a valid signature?
data := []byte("hello")
sig, err := agent.Sign(pubKey, data)
if err != nil {
t.Fatalf("Sign(%s): %v", pubKey.Type(), err)
}
if err := pubKey.Verify(data, sig); err != nil {
t.Fatalf("Verify(%s): %v", pubKey.Type(), err)
}
}
开发者ID:acquia,项目名称:fifo2kinesis,代码行数:52,代码来源:client_test.go
示例20: keyAuthCallback
func keyAuthCallback(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
guid := uuid.NewV4()
ip, remotePort := parseIpPortFrom(conn)
login := SshLogin{RemoteAddr: ip,
RemotePort: remotePort,
Username: conn.User(),
Guid: guid.String(),
Version: string(conn.ClientVersion()),
PublicKey: key.Marshal(),
KeyType: string(key.Type()),
LoginType: "key",
}
go login.Save()
//log.Println("Fail to authenticate", conn, ":", err)
//return nil, errors.New("invalid authentication")
return &ssh.Permissions{Extensions: map[string]string{"guid": guid.String()}}, nil
}
开发者ID:joshrendek,项目名称:ssh-passwd-honeypot,代码行数:17,代码来源:sshd.go
注:本文中的golang.org/x/crypto/ssh.PublicKey类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论