golang ssh 免密登陆

golang 配置ssh无密码登录,找到一个办法是需要SSH_AUTH_SOCK,然后使用如下代码连接

func SSHClient(hostport string, username string) (*ssh.Client, error) {
    sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
    if err != nil {
        logrus.Infof("error login,details: %s",err.Error())
        return nil,err
    }

    agent := agent.NewClient(sock)

    signers, err := agent.Signers()
    if err != nil {
        logrus.Infof("error login,details: %s",err.Error())
        return nil,err
    }

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

    cfg := &ssh.ClientConfig{
        User: username,
        Auth: auths,
        HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
            return nil
        },
    }
    cfg.SetDefaults()
    logrus.Infof("tcp dial to %s",hostport)
    client, err := ssh.Dial("tcp", hostport, cfg)
    if err != nil {
        logrus.Infof("error login,details: %s",err.Error())
        return nil,err
    }
    return client, nil
}

在本机 macbook可以登录测试机,在测试机(Linux)上登录不到其他测试机。报错:

dial unix: missing address

机器中并没有SSH_AUTH_SOCK
描述中的机器均已配置免密登陆。
谢谢大家

阅读 10.4k
2 个回答
新手上路,请多包涵

你的私钥是不是有密码,试着在Linux 客户端执行
ssh-agent
ssh-add ~/.ssh/id_dsa (你的私钥)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏