golang通过ssh获取主机ip和mac地址


一、安装集成ifconfig

linux输入命令
yum install -y net-tools.x86_64

二、ipconfig 查看设备信息

这个en开头的就是你实际的主机地址 inet是ip地址 ether是mac地址
在这里插入图片描述

三、输入命令查询

输入命令看是否能查询
ifconfig ens18 | grep ether | awk ‘{print $2}’
ifconfig ens18 | grep inet | awk ‘{print $2}’
在这里插入图片描述

四、代码部分

代码如下(示例):

import (
	"fmt"
	"strings"
	"golang.org/x/crypto/ssh"
)
type Cli struct {
	user   string
	pwd    string
	addr   string
	client *ssh.Client
}

func NewCli(user, pwd, addr string) Cli {
	return Cli{
		user: user,
		pwd:  pwd,
		addr: addr,
	}
}

// Connect 连接远程服务器
func (c *Cli) Connect() error {
	config := &ssh.ClientConfig{
		User: c.user,
		Auth: []ssh.AuthMethod{
			ssh.Password(c.pwd),
		},
		HostKeyCallback: ssh.InsecureIgnoreHostKey(),
	}
	client, err := ssh.Dial("tcp", c.addr, config)
	if nil != err {
		return fmt.Errorf("connect server error: %w", err)
	}
	c.client = client
	return nil
}

// Run 运行命令
func (c Cli) Run(shell string) (string, error) {
	if c.client == nil {
		if err := c.Connect(); err != nil {
			return "", err
		}
	}

	session, err := c.client.NewSession()
	if err != nil {
		return "", fmt.Errorf("create new session error: %w", err)
	}
	defer session.Close()

	buf, err := session.CombinedOutput(shell)
	return string(buf), err
}

// 调用测试
func main() {
	var (
		username = "root"
		password = "主机密码"
		addr     = "主机地址"
	)

	// 初始化
	client := NewCli(username, password, addr)

	// ssh 并运行脚本
	macsh := "ifconfig ens18 | grep " + "ether" + "| awk '{print $2}'"
	ipsh := "ifconfig ens18 | grep " + "inet " + "| awk '{print $2}'"

	macstr, err := client.Run(macsh)
	ipstr, err := client.Run(ipsh)
	if err != nil {
		log.Printf("failed to run shell,err=[%v]\n", err)
		return
	}
	if ipstr != "" {
		iplist := strings.Split(ipstr, "\n")

		if len(iplist) != 0 {
			ip = iplist[0]

		}

	}
	if macstr != "" {

		mac = strings.Replace(macstr, "\n", "", -1)
	}

	fmt.Println("====mac====", mac)
	fmt.Println("==ip=======", ip)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值