[Golang]ssh登录及执行命令
254 字
1 分钟
[Golang]ssh登录及执行命令
![[Golang]ssh登录及执行命令](/_astro/rehtt-legacy-05.C_Nl4Suq_2fcBKj.webp)
package main
import ( "fmt" "github.com/mitchellh/go-homedir" "golang.org/x/crypto/ssh" "io/ioutil" "log" "time")
func main() { re,err := sshL("192.168.199.1","root","rehttPassword","password","","uname -a",22) if err != nil{ fmt.println(err) } fmt.println(string(re))}
func sshL(sshHost,sshUser,sshPassword,sshType,sshKeyPath,command string,sshPort int) ([]byte,error) {
//创建sshp登陆配置 config := &ssh.ClientConfig{ Timeout: time.Second,//ssh 连接time out 时间一秒钟, 如果ssh验证错误 会在一秒内返回 User: sshUser, HostKeyCallback: ssh.InsecureIgnoreHostKey(), //这个可以, 但是不够安全 //HostKeyCallback: hostKeyCallBackFunc(h.Host), } if sshType == "password" { config.Auth = []ssh.AuthMethod{ssh.Password(sshPassword)} } else { config.Auth = []ssh.AuthMethod{publicKeyAuthFunc(sshKeyPath)} }
//dial 获取ssh client addr := fmt.Sprintf("%s:%d", sshHost, sshPort) sshClient, err := ssh.Dial("tcp", addr, config) if err != nil { log.Fatal("创建ssh client 失败",err) return nil,err } defer sshClient.Close()
//创建ssh-session session, err := sshClient.NewSession() if err != nil { log.Fatal("创建ssh session 失败",err) return nil,err } defer session.Close() //执行远程命令 combo,err := session.CombinedOutput(command) if err != nil { log.Fatal("远程执行cmd 失败",err) return nil,err } return combo,nil}
func publicKeyAuthFunc(kPath string) ssh.AuthMethod { keyPath, err := homedir.Expand(kPath) if err != nil { log.Fatal("find key's home dir failed", err) } key, err := ioutil.ReadFile(keyPath) if err != nil { log.Fatal("ssh key file read failed", err) } // Create the Signer for this private key. signer, err := ssh.ParsePrivateKey(key) if err != nil { log.Fatal("ssh key signer failed", err) } return ssh.PublicKeys(signer)}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
【Golang】反射
Golang笔记2023-06-14
2
【Golang】使用反射实现验证struct必填字段是否为空
Golang笔记2021-08-20
3
【Golang】命令行传递参数
Golang笔记2018-09-13
4
【Golang】简单的树莓派GPIO库
Golang2019-11-24
5
【Golang】GO项目结构
Golang笔记2019-06-25
随机文章随机推荐















加载更多…