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
描述中的机器均已配置免密登陆。
谢谢大家
你的私钥是不是有密码,试着在Linux 客户端执行
ssh-agent
ssh-add ~/.ssh/id_dsa (你的私钥)