golang使用ssh远程连接服务器并执行命令
安装golang.org/x
直接去github上面,把https://github.com/zieckey/golang.org,把整个目录拷贝下来放到你的gopath下面即可。记住在gopath的src下面,一定是golang.org/x/...
使用
package main
import (
"fmt"
"golang.org/x/crypto/ssh"
"log"
"net"
"time"
)
//连接的配置
type ClientConfig struct {
Host string //ip
Port int64 // 端口
Username string //用户名
Password string //密码
Client *ssh.Client //ssh client
LastResult string //最近一次运行的结果
}
func (cliConf *ClientConfig) createClient(host string, port int64, username, password string) {
var (
client *ssh.Client
err error
)
cliConf.Host = host
cliConf.Port = port
cliConf.Username = username
cliConf.Password = password
cliConf.Port = port
//一般传入四个参数:user,[]ssh.AuthMethod{ssh.Password(password)}, HostKeyCallback,超时时间,
config := ssh.ClientConfig{
User: cliConf.Username,
Auth: []ssh.AuthMethod{ssh.Password(password)},
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
Timeout: 10 * time.Second,
}
addr := fmt.Sprintf("%s:%d", cliConf.Host, cliConf.Port)
//获取client
if client, err = ssh.Dial("tcp", addr, &config); err != nil {
log.Fatalln("error occurred:", err)
}
cliConf.Client = client
}
func (cliConf *ClientConfig) RunShell(shell string) string {
var (
session *ssh.Session
err error
)
//获取session,这个session是用来远程执行操作的
if session, err = cliConf.Client.NewSession(); err != nil {
log.Fatalln("error occurred:", err)
}
//执行shell
if output, err := session.CombinedOutput(shell); err != nil {
log.Fatalln("error occurred:", err)
} else {
cliConf.LastResult = string(output)
}
return cliConf.LastResult
}
func main() {
cliConf := new(ClientConfig)
cliConf.createClient("xxxx.xxx.xx.xx", 22, "root", "xxxxxxxxx")
/*
可以看到我们这里每次执行一条命令都会创建一条session
这是因为一条session默认只能执行一条命令
并且两条命令不可以分开写
比如:
cliConf.RunShell("cd /opt")
cliConf.RunShell("ls")
这两条命令是无法连续的,下面的ls查看的依旧是~目录
因此我们可以连着写,使用;分割
*/
fmt.Println(cliConf.RunShell("cd /opt; ls -l"))
/*
total 20
drwxr-xr-x 3 root root 4096 Nov 18 14:05 hadoop
drwxr-xr-x 3 root root 4096 Nov 18 14:20 hive
drwxr-xr-x 3 root root 4096 Nov 18 15:07 java
drwxr-xr-x 3 root root 4096 Nov 4 23:01 kafka
drwxr-xr-x 3 root root 4096 Nov 4 22:54 zookeeper
*/
}
golang使用ssh远程连接服务器并执行命令的更多相关文章
- RSA加密算法和SSH远程连接服务器
服务器端与客户端的密钥系统不一样,称为非对称式密钥系统 RSA算法的基础是模运算x mod n,事实上: [(a mod n) + (b mod n)] mod n = (a+b) mod n [(a ...
- Python通过ssh连接服务器并执行命令
[本文出自天外归云的博客园] 脚本示例如下: # coding:utf-8 import time,paramiko,re,StringIO def exec_shell(command): ''' ...
- expect远程登录服务器并执行命令
#!/usr/bin/expectset timeout 120 #设置执行超时时间,任何输入120秒后退出set password "password" ...
- 使用VBS实现SSH远程登录并自动执行命令
set ws=createobject("wscript.shell")ws.run "Putty所在路径\putty.exe -ssh -pw 你的密码 用户名@192 ...
- mac 通过 终端 ssh 远程连接 centos 服务器
mac 通过 终端 ssh 远程连接 centos 服务器 在终端下输入 ssh -l root 204.74.*.* 就可以连接了,这是端口没变的情况,还是原来的22 ssh -p 448 ...
- 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)
注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...
- 远程连接Kali Linux使用PuTTY实现SSH远程连接
远程连接Kali Linux使用PuTTY实现SSH远程连接 本书主要以在Android设备上安装的Kali Linux操作系统为主,介绍基于Bash Shell渗透测试.由于在默认情况下,在Andr ...
- SSH 远程连接
ssh远程连接 准备工作: 1 准备两台linux pc 我们一般用的是VMware虚礼软件 2 这两台linux可以互通 3 linux1 :192.168.2.2 这台为你要连接的服务器 linu ...
- 虚拟机VMware网络类型&&SSH远程连接Linux
前言: Linux专题是16年11月开始写,说来惭愧,已经5个月没学Linux,至今感觉连入门还没达到.暑假实习有投运维开发岗位,无奈对Linux不熟悉,校招简历也被刷了.so, 我打算先花1个月内的 ...
随机推荐
- (十二)class文件结构:魔数和版本
一.java体系结构 二.class格式文件概述 class文件是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积 ...
- Python 解析式、生成器
标准库datetime datetime模块 对日期.时间.时间戳的处理 datetime类 类方法 today() 返回本地时区当前时间的datetime对象 now(tz=None) 返回当前时间 ...
- 【FFMPEG】I,P,B帧和PTS,DTS时间戳的关系
FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp). 顾名思义,前者是解码的时间,后者是显示的时间.要仔细理解这两个 ...
- 【数据库开发】在Windows上和Linux上配置MySQL的过程
[数据库开发]在Windows上和Linux上配置MySQL的过程 标签(空格分隔): [编程开发] 首先是在Windows上尝试用QT进行MySQL数据库开发,结果总出现driver不能load的错 ...
- 【数据库开发】MySQL修改root密码
方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass ...
- 八个免费的Vue图标库
1. Vue-awesome 也许大家知道 Font-awesome 之类比较流行的图标库,就像各大组件库都有各自版本一样,它也有Vue的版本 Github地址:https://github.com/ ...
- with as用法 --Python
有些任务,可能事先设置,时候做清理工作,如下面一段程序: f = open('tmp.txt') data = f.read() print(data) 是不是忘了什么?没错,很明显忘记关闭文件句柄. ...
- 登陆Linux服务器时触发邮件提醒
目前,客户只能在发现数据或者虚拟机被恶意侵入或者用户的误操作导致了数据的丢失之后,采取善后的手段,但是并没法做到提前的预警.那么通过 PAM 模块,就可以实现用户登录及获取root 权限时,通过邮件的 ...
- linux awk和sed工具
慕课网链接:https://www.imooc.com/video/14508 部分示例命令 #替换passwd中的用户名和userid和gid gsed 's/\(^[a-z_-]\+\):\*:\ ...
- kettle工具的介绍和使用
kettle详解(数据抽取.转换.装载) 原文地址链接:https://blog.csdn.net/qq_35731570/article/details/71123413 一:下载路径 当你要学 ...