go 代码远程链接服务器执行脚本
今天想用go实现远程链接服务器,并且实现服务器脚本操作,于是就实现了以下代码,可用账号密码链接服务器,和本地私钥链接。
账号密码链接
代码如下
// 服务器地址和端口
server := "127.0.0.1"
port := 22
// 用户名和密钥文件路径
username := "root"
password := "123456"
// 配置 SSH 客户端
config := &ssh.ClientConfig{
User: username,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 注意:这是一个不安全的设置,实际应用中应根据需要进行修改
}
// 连接到 SSH 服务器
client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", server, port), config)
if err != nil {
fmt.Printf("无法连接到 SSH 服务器: %v \n", err)
return err
}
defer client.Close()
// 执行远程命令
session, err := client.NewSession()
if err != nil {
fmt.Printf("无法创建 SSH 会话: %v", err)
return err
}
defer session.Close()
// 设置远程脚本命令
scriptCommand := "echo '链接成功'"
// 执行远程脚本
output, err := session.CombinedOutput(scriptCommand)
if err != nil {
fmt.Printf("无法执行远程脚本: %v", err)
return err
}
// 输出远程脚本执行结果
fmt.Println(string(output))
return nil
本地私钥链接
代码如下
// 服务器地址和端口
server := "127.0.0.1"
port := 22
// 用户名和密钥文件路径
username := "root"
keyPath := "/path/to/your/private-key"
// 读取私钥文件
key, err := ioutil.ReadFile(keyPath)
if err != nil {
log.Fatalf("无法读取私钥文件: %v", err)
}
// 解析私钥
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
log.Fatalf("无法解析私钥: %v", err)
}
// 配置 SSH 客户端
config := &ssh.ClientConfig{
User: username,
Auth: []ssh.AuthMethod{
ssh.PublicKeys(signer),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 注意:这是一个不安全的设置,实际应用中应根据需要进行修改
}
// 连接到 SSH 服务器
client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", server, port), config)
if err != nil {
fmt.Printf("无法连接到 SSH 服务器: %v \n", err)
return err
}
defer client.Close()
// 执行远程命令
session, err := client.NewSession()
if err != nil {
fmt.Printf("无法创建 SSH 会话: %v", err)
return err
}
defer session.Close()
// 设置远程脚本命令
scriptCommand := "echo '链接成功'"
// 执行远程脚本
output, err := session.CombinedOutput(scriptCommand)
if err != nil {
fmt.Printf("无法执行远程脚本: %v", err)
return err
}
// 输出远程脚本执行结果
fmt.Println(string(output))
return nil
本作品采用《CC 协议》,转载必须注明作者和本文链接