本文整理汇总了Golang中golang.org/x/crypto/ssh.Client类的典型用法代码示例。如果您正苦于以下问题:Golang Client类的具体用法?Golang Client怎么用?Golang Client使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Client类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: sendSshKeepAlive
// sendSshKeepAlive is a helper which sends a [email protected] request
// on the specified SSH connections and returns true of the request succeeds
// within a specified timeout.
func sendSshKeepAlive(
sshClient *ssh.Client, conn net.Conn, timeout time.Duration) error {
errChannel := make(chan error, 2)
if timeout > 0 {
time.AfterFunc(timeout, func() {
errChannel <- TimeoutError{}
})
}
go func() {
// Random padding to frustrate fingerprinting
_, _, err := sshClient.SendRequest(
"[email protected]", true,
MakeSecureRandomPadding(0, TUNNEL_SSH_KEEP_ALIVE_PAYLOAD_MAX_BYTES))
errChannel <- err
}()
err := <-errChannel
if err != nil {
sshClient.Close()
conn.Close()
}
return ContextError(err)
}
示例2: getClientAndSession
func (n *SSHNode) getClientAndSession() (*ssh.Client, *ssh.Session, error) {
var client *ssh.Client
var s *ssh.Session
var err error
// Retry few times if ssh connection fails
for i := 0; i < MaxSSHRetries; i++ {
client, err = n.dial()
if err != nil {
time.Sleep(SSHRetryDelay)
continue
}
s, err = client.NewSession()
if err != nil {
client.Close()
time.Sleep(SSHRetryDelay)
continue
}
return client, s, nil
}
return nil, nil, err
}
示例3: NewClient
func NewClient(conn *ssh.Client, readLimitBytesPerSecond, writeLimitBytesPerSecond int64, opts ...func(*sftp.Client) error) (*sftp.Client, error) {
s, err := conn.NewSession()
if err != nil {
return nil, err
}
if err := s.RequestSubsystem("sftp"); err != nil {
return nil, err
}
pw, err := s.StdinPipe()
if err != nil {
return nil, err
}
pr, err := s.StdoutPipe()
if err != nil {
return nil, err
}
if readLimitBytesPerSecond > 0 {
pr = flowrate.NewReader(pr, readLimitBytesPerSecond)
}
if writeLimitBytesPerSecond > 0 {
pw = flowrate.NewWriter(pw, writeLimitBytesPerSecond)
}
return sftp.NewClientPipe(pr, pw, opts...)
}
示例4: CopyLocalFileToRemote
func CopyLocalFileToRemote(client *ssh.Client, localFilePath string, filename string) error {
// Each ClientConn can support multiple interactive sessions,
// represented by a Session.
session, err := client.NewSession()
if err != nil {
log.Fatal("Failed to create session: " + err.Error())
}
defer session.Close()
writer, err := session.StdinPipe()
if err != nil {
return err
}
defer writer.Close()
go func() {
fileContents, _ := ioutil.ReadFile(localFilePath + "/" + filename)
content := string(fileContents)
fmt.Fprintln(writer, "C0644", len(content), filename)
fmt.Fprint(writer, content)
fmt.Fprintln(writer, "\x00") // transfer end with \x00\
}()
session.Run("/usr/bin/scp -t ./")
return nil
}
示例5: RunCommand
func RunCommand(c *ssh.Client, cmd string) error {
s, err := c.NewSession()
defer s.Close()
if err != nil {
return err
}
return s.Run(cmd)
}
示例6: handleLocalSshConn
func handleLocalSshConn(lnConn net.Conn) {
defer func() {
if Config.Ssh_Reverse_Proxy.Exit_On_Panic {
return
}
if r := recover(); r != nil {
Log.Error("Recovered from panic in connection from "+
lnConn.RemoteAddr().String()+":", r)
}
}()
Log.Info("Received connection from", lnConn.RemoteAddr())
var sClient *ssh.Client
psConfig := getProxyServerSshConfig(&sClient)
psConn, psChans, psReqs, err := ssh.NewServerConn(lnConn, psConfig)
if err != nil {
Log.Info("Could not establish connection with " + lnConn.RemoteAddr().String() + ": " + err.Error())
return
}
defer psConn.Close()
defer sClient.Close()
go ssh.DiscardRequests(psReqs)
for newChannel := range psChans {
handleChannel(newChannel, sClient)
}
Log.Info("Lost connection with", lnConn.RemoteAddr())
}
示例7: ExecuteCmd
func ExecuteCmd(client *ssh.Client, command string, stdout *string, stderr *string) error {
session, err := client.NewSession()
if err != nil {
panic("Failed to create session: " + err.Error())
}
defer session.Close()
//session.Setenv("PATH", "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin") //apparently needs serverside support
// Once a Session is created, you can execute a single command on
// the remote side using the Run method.
var b bytes.Buffer
var a bytes.Buffer
session.Stdout = &b
session.Stderr = &a
log.Printf("CMD: %s\n", command)
if err := session.Run(command); err != nil {
return err
}
if stdout != nil {
*stdout = b.String()
}
if stderr != nil {
*stderr = a.String()
}
return err
}
示例8: tunnelConnectionToPortUsingClient
func tunnelConnectionToPortUsingClient(localConn net.Conn, rport int, client *ssh.Client) {
addr, err := net.ResolveTCPAddr("tcp", "127.0.0.1:"+strconv.Itoa(rport))
if err != nil {
panic(err)
}
remoteConn, err := client.DialTCP("tcp", nil, addr)
if err != nil {
panic(err)
}
wg := sync.WaitGroup{}
wg.Add(2)
copyConn := func(writer, reader net.Conn) {
defer wg.Done()
CopyAndMeasureThroughput(writer, reader)
}
go copyConn(localConn, remoteConn)
go copyConn(remoteConn, localConn)
go func() {
wg.Wait()
localConn.Close()
remoteConn.Close()
}()
}
示例9: getClientAndSession
func (n *SSHNode) getClientAndSession() (*ssh.Client, *ssh.Session, error) {
var client *ssh.Client
var s *ssh.Session
var err error
// Retry few times if ssh connection fails
for i := 0; i < MaxSSHRetries; i++ {
client, err = n.dial()
if err != nil {
time.Sleep(SSHRetryDelay)
continue
}
s, err = client.NewSession()
if err != nil {
client.Close()
time.Sleep(SSHRetryDelay)
continue
}
modes := ssh.TerminalModes{
ssh.ECHO: 0,
ssh.TTY_OP_ISPEED: 14400,
ssh.TTY_OP_OSPEED: 14400,
}
// Request pseudo terminal
if err := s.RequestPty("xterm", 40, 80, modes); err != nil {
return nil, nil, fmt.Errorf("failed to get pseudo-terminal: %v", err)
}
return client, s, nil
}
return nil, nil, err
}
示例10: CopyFile
func CopyFile(conn *ssh.Client, FileName, DirectoryPath string) bool {
defer conn.Close()
if !strings.HasSuffix(DirectoryPath, "/") {
DirectoryPath = DirectoryPath + "/"
}
con, err := sftp.NewClient(conn, sftp.MaxPacket(5e9))
if err != nil {
color.Red("%s传输文件新建会话错误: %s\n", conn.RemoteAddr(), err)
return false
}
sFile, _ := os.Open(FileName)
defer sFile.Close()
dFile := DirectoryPath + FileName
fmt.Printf("%s 目标路径:%s\n", conn.RemoteAddr(), dFile)
File, err := con.OpenFile(dFile, os.O_CREATE|os.O_TRUNC|os.O_RDWR)
if err != nil {
color.Red("%s 创建文件%s错误: %s \n", conn.RemoteAddr(), dFile, err)
return false
}
defer File.Close()
for {
buf := make([]byte, 1024)
n, err := sFile.Read(buf)
if err != nil {
if err.Error() == "EOF" {
break
}
return false
}
File.Write(buf[:n])
}
Result <- fmt.Sprintf("上传%s到%s成功.\n", FileName, conn.RemoteAddr())
return true
}
示例11: tailFilesOnClient
func tailFilesOnClient(client *ssh.Client, files []string, sudo bool, linec chan<- string, errc chan<- error) {
var sessions []*ssh.Session
closeSessions := func() {
for _, session := range sessions {
_ = session.Signal(ssh.SIGKILL)
_ = session.Close()
}
}
var wg sync.WaitGroup
for _, file := range files {
session, err := client.NewSession()
if err != nil {
closeSessions()
errc <- fmt.Errorf("can't open session: %v", err)
return
}
sessions = append(sessions, session)
wg.Add(1)
go func(file string) {
defer wg.Done()
err := tailFile(session, file, sudo, linec)
if err != nil {
errc <- err
}
}(file)
}
wg.Wait()
}
示例12: scpAndRun
func scpAndRun(client ssh.Client) {
scpSession, err := client.NewSession()
if err != nil {
panic("Failed to create SCP session: " + err.Error())
}
defer scpSession.Close()
scriptContents := `#!/bin/bash
echo "this script is located at $dirname $0"
`
scriptReader := strings.NewReader(scriptContents)
scpError := copy(int64(len(scriptContents)), os.FileMode(0777), "test-script", scriptReader, "/tmp/scripts/", scpSession)
if scpError != nil {
panic(scpError)
}
execSession, err := client.NewSession()
if err != nil {
panic("Failed to create session: " + err.Error())
}
defer execSession.Close()
var stdoutBytes bytes.Buffer
execSession.Stdout = &stdoutBytes
if err := execSession.Run("/tmp/scripts/test-script"); err != nil {
panic("Failed to run: " + err.Error())
}
}
示例13: installOnRemote
func (p *Project) installOnRemote(step int, conn *ssh.Client) {
// Git and some other programs can send us an unsuccessful exit (< 0)
// even if the command was successfully executed on the remote shell.
// On these cases, we want to ignore those errors and move onto the next step.
ignoredError := "Reason was: ()"
// Creates a session over the ssh connection to execute the commands
session, err := conn.NewSession()
if err != nil {
log.Fatal("Failed to build session: ", err)
}
defer session.Close()
var stdoutBuf bytes.Buffer
session.Stdout = &stdoutBuf
fmt.Println(p.typ.program.setup[step])
err = session.Run(p.typ.program.setup[step])
if err != nil && !strings.Contains(err.Error(), ignoredError) {
log.Printf("Command '%s' failed on execution", p.typ.program.setup[step])
log.Fatal("Error on command execution: ", err.Error())
}
}
示例14: runCommands
//Execute ssh commands until "exit" is entered
func runCommands(client *ssh.Client) {
var cmd string
for strings.ToLower(cmd) != "exit" {
//Creates a new session. Only one command per session
session, err := client.NewSession()
if err != nil {
panic("Failed to create session: " + err.Error())
}
defer session.Close()
fmt.Scanf("%s", &cmd)
var b bytes.Buffer
session.Stdout = &b
err1 := session.Run(cmd)
if err1 != nil {
fmt.Print("You used an invalid command.")
err1 = nil
}
fmt.Println(b.String())
}
//clear the terminal and display conn closed
clear := exec.Command("clear")
clear.Stdout = os.Stdout
clear.Run()
fmt.Println("\n\nConnection Closed")
}
示例15: sshExec
func sshExec(client *ssh.Client, cmd string) (string, string, int, error) {
framework.Logf("Executing '%s' on %v", cmd, client.RemoteAddr())
session, err := client.NewSession()
if err != nil {
return "", "", 0, fmt.Errorf("error creating session to host %s: '%v'", client.RemoteAddr(), err)
}
defer session.Close()
// Run the command.
code := 0
var bout, berr bytes.Buffer
session.Stdout, session.Stderr = &bout, &berr
err = session.Run(cmd)
if err != nil {
// Check whether the command failed to run or didn't complete.
if exiterr, ok := err.(*ssh.ExitError); ok {
// If we got an ExitError and the exit code is nonzero, we'll
// consider the SSH itself successful (just that the command run
// errored on the host).
if code = exiterr.ExitStatus(); code != 0 {
err = nil
}
} else {
// Some other kind of error happened (e.g. an IOError); consider the
// SSH unsuccessful.
err = fmt.Errorf("failed running `%s` on %s: '%v'", cmd, client.RemoteAddr(), err)
}
}
return bout.String(), berr.String(), code, err
}