ssh

最后更新于:2022-04-02 02:47:07

[TOC] ## 语法 ### Func ``` func DiscardRequests(in <-chan *Request) func FingerprintLegacyMD5(pubKey PublicKey) string func FingerprintSHA256(pubKey PublicKey) string func Marshal(msg interface{}) []byte func MarshalAuthorizedKey(key PublicKey) []byte func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) func ParseRawPrivateKeyWithPassphrase(pemBytes, passphrase []byte) (interface{}, error) func Unmarshal(data []byte, out interface{}) error ```` ### Type ``` type AuthMethod func GSSAPIWithMICAuthMethod(gssAPIClient GSSAPIClient, target string) AuthMethod func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod func Password(secret string) AuthMethod func PasswordCallback(prompt func() (secret string, err error)) AuthMethod func PublicKeys(signers ...Signer) AuthMethod func PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod func RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod type Client func Dial(network, addr string, config *ClientConfig) (*Client, error) func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client func (c *Client) Dial(n, addr string) (net.Conn, error) func (c *Client) DialTCP(n string, laddr, raddr *net.TCPAddr) (net.Conn, error) func (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel func (c *Client) Listen(n, addr string) (net.Listener, error) func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) func (c *Client) ListenUnix(socketPath string) (net.Listener, error) func (c *Client) NewSession() (*Session, error) type Conn func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) type ServerConn func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) type HostKeyCallback func FixedHostKey(key PublicKey) HostKeyCallback func InsecureIgnoreHostKey() HostKeyCallback type PublicKey func NewPublicKey(key interface{}) (PublicKey, error) func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey, comment string, rest []byte, ...) func ParsePublicKey(in []byte) (out PublicKey, err error) type Session func (s *Session) Close() error func (s *Session) CombinedOutput(cmd string) ([]byte, error) func (s *Session) Output(cmd string) ([]byte, error) func (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error func (s *Session) RequestSubsystem(subsystem string) error func (s *Session) Run(cmd string) error func (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) func (s *Session) Setenv(name, value string) error func (s *Session) Shell() error func (s *Session) Signal(sig Signal) error func (s *Session) Start(cmd string) error func (s *Session) StderrPipe() (io.Reader, error) func (s *Session) StdinPipe() (io.WriteCloser, error) func (s *Session) StdoutPipe() (io.Reader, error) func (s *Session) Wait() error func (s *Session) WindowChange(h, w int) error ``` ## 实例 ### 远程登录 / 执行 cmd ``` ce := func(err error, msg string) { if err != nil { log.Fatalf("%s error: %v", msg, err) } } client, err := ssh.Dial("tcp", "192.168.0.151:22", &ssh.ClientConfig{ User: "root", Auth: []ssh.AuthMethod{ssh.Password("bigant.cn")}, HostKeyCallback: ssh.InsecureIgnoreHostKey(), }) ce(err, "dial") session, err := client.NewSession() ce(err, "new session") defer session.Close() session.Stdout = os.Stdout session.Stderr = os.Stderr session.Stdin = os.Stdin // 方式一: ssh 直接执行 //session.Run("ls -l") // 方式二:在控制台控制 modes := ssh.TerminalModes{ ssh.ECHO: 0, ssh.TTY_OP_ISPEED: 14400, ssh.TTY_OP_OSPEED: 14400, } err = session.RequestPty(`[linux](https://www.linuxprobe.com/ "linux")`, 32, 160, modes) ce(err, "request pty") err = session.Shell() ce(err, "start shell") err = session.Wait() ce(err, "return") ```
';