50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
|
package ssh
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
// Run Execute cmd on the remote host and return stderr and stdout
|
||
|
func (c *Client) Run(cmd string) ([]byte, error) {
|
||
|
session, err := c.SSHClient.NewSession()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer session.Close()
|
||
|
|
||
|
return session.CombinedOutput(cmd)
|
||
|
}
|
||
|
|
||
|
//Exec Execute cmd on the remote host and return stderr and stdout
|
||
|
func (c *Client) Exec(cmd string) ([]byte, error) {
|
||
|
session, err := c.SSHClient.NewSession()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer session.Close()
|
||
|
|
||
|
return session.CombinedOutput(cmd)
|
||
|
}
|
||
|
|
||
|
// RunScript Executes a shell script file on the remote machine.
|
||
|
// It is copied in the tmp folder and ran in a single session.
|
||
|
// chmod +x is applied before running.
|
||
|
// Returns an SshResponse and an error if any has occured
|
||
|
func (c *Client) RunScript(scriptPath string) ([]byte, error) {
|
||
|
session, err := c.SSHClient.NewSession()
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer session.Close()
|
||
|
|
||
|
// 1. 上传 script
|
||
|
remotePath := fmt.Sprintf("/tmp/%s", filepath.Base(scriptPath))
|
||
|
if err := c.UploadFile(scriptPath, remotePath); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
// 2. 执行script
|
||
|
rCmd := fmt.Sprintf("chmod +x %s ; %s", remotePath, remotePath)
|
||
|
return session.CombinedOutput(rCmd)
|
||
|
}
|