1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > golang ssh 远程登录执行命令

golang ssh 远程登录执行命令

时间:2020-04-27 06:31:18

相关推荐

golang  ssh 远程登录执行命令

执行系统命令

这个方法需要有一个环境的准备:与目标服务器建立免密码登陆,并且执行程序的用户与执行用户一致。

import ("net""log""fmt""bytes""os/exec""strconv"str "strings""/x/crypto/ssh")func runCmd(){var stdOut, stdErr bytes.Buffercmd := mand( "ssh", "username@192.168.1.4", "if [ -d liujx/project ];then echo 0;else echo 1;fi" )cmd.Stdout = &stdOutcmd.Stderr = &stdErrif err := cmd.Run(); err != nil {fmt.Printf( "cmd exec failed: %s : %s", fmt.Sprint( err ), stdErr.String() )}fmt.Print( stdOut.String() )ret, err := strconv.Atoi( str.Replace( stdOut.String(), "\n", "", -1 ) )if err != nil {panic(err)}fmt.Printf("%d, %s\n", ret, stdErr.String() )}

SSH 客户端连接

这种方法可以不用搭建免密码登陆环境,连接时可指定用户和密码的。

func SSHConnect( user, password, host string, port int ) ( *ssh.Session, error ) {var (auth []ssh.AuthMethodaddr stringclientConfig *ssh.ClientConfigclient *ssh.Clientsession*ssh.Sessionerrerror)// get auth methodauth = make([]ssh.AuthMethod, 0)auth = append(auth, ssh.Password(password))hostKeyCallbk := func(hostname string, remote net.Addr, key ssh.PublicKey) error {return nil}clientConfig = &ssh.ClientConfig{User:user,Auth:auth,// Timeout: 30 * time.Second,HostKeyCallback: hostKeyCallbk, }// connet to sshaddr = fmt.Sprintf( "%s:%d", host, port )if client, err = ssh.Dial( "tcp", addr, clientConfig ); err != nil {return nil, err}// create sessionif session, err = client.NewSession(); err != nil {return nil, err}return session, nil}func runSsh(){var stdOut, stdErr bytes.Buffersession, err := SSHConnect( "username", "passworld", "192.168.1.4", 22 )if err != nil {log.Fatal(err)}defer session.Close()session.Stdout = &stdOutsession.Stderr = &stdErrsession.Run("if [ -d liujx/project ]; then echo 0; else echo 1; fi")ret, err := strconv.Atoi( str.Replace( stdOut.String(), "\n", "", -1 ) )if err != nil {panic(err)}fmt.Printf("%d, %s\n", ret, stdErr.String() )}

ps: 由于 被墙,所以直接用go get /x/crypto/ssh会报超时,所以如果我们可以从 GitHub 上获取资源拷贝到这个目录下, 具体操作如下:

mkdir -p $GOPATH/src//x/cd $GOPATH/src//x/git clone /golang/crypto.git

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。