Я использую модуль 's sh' golang, и мне интересно, реализовал ли я его (или пытался). Является ли "EOF" как ошибка, ожидаемая в сеансе. Close ()? В примерах, которые я видел в Интернете, никто не проверяет ошибку session.Close (). Это то, что я должен игнорировать или обрабатывать? Из того, что я могу сказать, от сервера также не ожидается никаких ошибок. Мне интересно, не выполняю ли я команду правильно или нет, или не читаю буфер должным образом.
Вот мой код:
package main
import (
"bytes"
"fmt"
"strings"
"golang.org/x/crypto/ssh"
)
func main() {
sshConfig := &ssh.ClientConfig{
User: “my_username”,
Auth: []ssh.AuthMethod{
ssh.Password(“my password”),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
connection, err := ssh.Dial("tcp", "localhost:22", sshConfig)
if err != nil {
fmt.Printf("Failed to dial: %s\n", err)
return
}
defer func() {
if err := connection.Close(); err != nil {
fmt.Println("Received an error closing the ssh connection: ", err)
} else {
fmt.Println("No error found closing ssh connection")
}
}()
session, err := connection.NewSession()
if err != nil {
fmt.Printf("Failed to create session: %s\n", err)
return
}
defer func() {
if err := session.Close(); err != nil {
fmt.Println("Received an error closing the ssh session: ", err)
} else {
fmt.Println("No error found closing ssh session")
}
}()
fmt.Println("created session")
var stdOut bytes.Buffer
var stdErr bytes.Buffer
session.Stdout = &stdOut
session.Stderr = &stdErr
err = session.Run("pwd")
fmt.Println("Executed command")
fmt.Println("Command stdOut is:", strings.TrimRight(stdOut.String(), "\n"), " --- stdError is:", strings.TrimRight(stdErr.String(), "\n"))
}
Вывод, который я получаю:
$ go run main.go
created session
Executed command
Command stdOut is: /Users/my_username --- stdError is:
Received an error closing the ssh session: EOF
No error found closing ssh connection
$
Любой совет?