Documentation ¶
Index ¶
- Constants
- func AuthByPrivateKeys(keys ...[]byte) (ssh.AuthMethod, error)
- func AuthByPrivateKeysFromPaths(files ...string) (ssh.AuthMethod, error)
- func CopyBufferWithContext(dst io.Writer, src io.Reader, buf []byte, ctx context.Context) (written int64, err error)
- func CurrentUser() string
- func DisplayBanner(message string) error
- func IgnoreHostKey(hostname string, remote net.Addr, key PublicKey) error
- func KnownHostsPath(username string) (string, error)
- func NewFixHostKeyCallback(key []byte) (func(hostname string, remote net.Addr, key ssh.PublicKey) error, error)
- func NewKnownHostCallback(interactively bool, files ...string) func(hostname string, remote net.Addr, key PublicKey) error
- func PrivateKeyPath(username string) (string, error)
- func WrapAuthMethodSlice(methods []AuthMethod) []ssh.AuthMethod
- func WrapBannerCallback(callback BannerCallback) func(message string) error
- func WrapHostKeyCallback(callback HostKeyCallback) func(hostname string, remote net.Addr, key ssh.PublicKey) error
- type AuthMethod
- type BannerCallback
- type Channel
- type Config
- type Director
- func (d *Director) BindConnTo(lconn net.Conn, netType, addr string, rctx, wctx context.Context) error
- func (d *Director) BindConnToWithBuffer(lconn net.Conn, netType, addr string, bufSize int, rctx, wctx context.Context) error
- func (d *Director) BindTcpConnTo(lconn net.Conn, origin, to *net.TCPAddr, rctx, wctx context.Context) error
- func (d *Director) BindTcpConnToWithBuffer(lconn net.Conn, origin, to *net.TCPAddr, bufSize int, ...) error
- func (d *Director) DirectTcpToWithBuffer(listener net.Listener, to *net.TCPAddr, bufSize int, ctx context.Context)
- func (d *Director) RedirectTcpTo(localL net.Listener, netType, addr string, ctx context.Context)
- func (d *Director) RedirectTo(localL net.Listener, netType, toAddr string, ctx context.Context)
- func (d *Director) RedirectToWithBuffer(listener net.Listener, netType, addr string, bufSize int, ctx context.Context)
- type HostKeyCallback
- type KeyboardInteractiveChallenge
- type KnownHostsChecker
- type NewChannel
- type NewConnCallback
- type PublicKey
- type SSHClient
- func (client *SSHClient) Client() *ssh.Client
- func (client *SSHClient) Dial(netType, addr string) (net.Conn, error)
- func (client *SSHClient) DialTCP(netType string, laddr, raddr *net.TCPAddr) (net.Conn, error)
- func (client *SSHClient) Listen(netType, addr string) (net.Listener, error)
- func (client *SSHClient) ListenTcp(laddr *net.TCPAddr) (net.Listener, error)
- func (client *SSHClient) ListenUnix(socketPath string) (net.Listener, error)
- func (client *SSHClient) NewDirector() *Director
- func (client *SSHClient) OpenChannel(name string, extraData []byte) (Channel, <-chan *ssh.Request, error)
- func (client *SSHClient) OpenSession() (*Session, error)
- type Session
- func (s *Session) AutoUpdateTerminalSize() (context.CancelFunc, error)
- func (s *Session) AutoUpdateTerminalSizeForWindowsOS(interval time.Duration) (context.CancelFunc, error)
- func (s *Session) Close() error
- func (s *Session) Exec(cmdline string) error
- func (s *Session) KeepAlive(interval time.Duration, maxErrRetries int) context.CancelFunc
- func (s *Session) MakeRow(input *os.File) (func() error, error)
- func (s *Session) PreparePty(termMode string) error
- func (s *Session) PreparePtyWithSize(termMode string, termWidth, termHeight int) error
- func (s *Session) RedirectInput(in io.Reader) error
- func (s *Session) RedirectOutput(out, err io.Writer) error
- func (s *Session) RedirectToSTD() error
- func (s *Session) RunForCombineOutput(command string) ([]byte, error)
- func (s *Session) RunForOutput(command string) ([]byte, error)
- func (s *Session) RunWithPty(command, termMode string) error
- func (s *Session) SendSignal(sig Signal) error
- func (s *Session) SendWinChange(fd, oldTermHeight, oldTermWidth int) (int, int, error)
- func (s *Session) SetEnv(name, value string) error
- func (s *Session) SetEnvs(envs *map[string]string) error
- func (s *Session) Shell() error
- type Signal
Constants ¶
const ( OpenSSHPrivateKeyPathPath = ".ssh/id_rsa" OpenSSHKnownHostsPath = ".ssh/known_hosts" )
Variables ¶
This section is empty.
Functions ¶
func AuthByPrivateKeys ¶
func AuthByPrivateKeys(keys ...[]byte) (ssh.AuthMethod, error)
func AuthByPrivateKeysFromPaths ¶
func AuthByPrivateKeysFromPaths(files ...string) (ssh.AuthMethod, error)
AuthByPrivateKeysFromPaths 从给定的文件中加载私钥并生成 Signer,并生成 ssh.AuthMethod 认证方法. 任何一个文件解析失败都将返回一个不为 nil 的错误
func CopyBufferWithContext ¶
func CopyBufferWithContext(dst io.Writer, src io.Reader, buf []byte, ctx context.Context) (written int64, err error)
CopyBufferWithContext 导出的 io.copyBuffer 函数,可传入 Context 对应的 cancelFunc 来终止流之间的复制,并返回 nil error
func IgnoreHostKey ¶
IgnoreHostKey 忽略主机公钥,总是返回 nil error
func KnownHostsPath ¶
KnownHostsPath 获取给定用户的默认的 Open-SSH known_hosts 路径
func NewFixHostKeyCallback ¶
func NewFixHostKeyCallback(key []byte) (func(hostname string, remote net.Addr, key ssh.PublicKey) error, error)
NewFixHostKeyCallback 用于固定主机公钥的主机验证方式
func NewKnownHostCallback ¶
func NewKnownHostCallback(interactively bool, files ...string) func(hostname string, remote net.Addr, key PublicKey) error
NewKnownHostCallback 生成一个known_host callback
func PrivateKeyPath ¶
PrivateKeyPath 获取给定用户的默认的 Open-SSH 私钥路径
func WrapAuthMethodSlice ¶
func WrapAuthMethodSlice(methods []AuthMethod) []ssh.AuthMethod
func WrapBannerCallback ¶
func WrapBannerCallback(callback BannerCallback) func(message string) error
WrapBannerCallback WrapHostKeyCallback 将 BannerCallback 转化为 ssh 包可接受参数类型
func WrapHostKeyCallback ¶
func WrapHostKeyCallback(callback HostKeyCallback) func(hostname string, remote net.Addr, key ssh.PublicKey) error
WrapHostKeyCallback 将 HostKeyCallback 转化为 ssh 包可接受参数类型
Types ¶
type AuthMethod ¶
type AuthMethod interface { ssh.AuthMethod }
func KeyboardInteractive ¶
func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod
KeyboardInteractive 返回一个 AuthMethod
func ReadPasswordAuth ¶
func ReadPasswordAuth(prompt ...string) (AuthMethod, error)
ReadPasswordAuth 从标准输入中获取输入密码进行认证 prompt 为输入前的字符提示;
func RetryableAuthMethod ¶
func RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod
RetryableAuthMethod 是其他 auth 方法的装饰器,使它们能够在考虑 AuthMethod 本身失败之前重试到 maxTries。如果 maxTries <= 0,将无限期重试
type BannerCallback ¶
type Config ¶
type Config struct { Rand io.Reader // 随机数源 RekeyThreshold uint64 // KeyExchanges []string // 密钥交换算法算法 Ciphers []string // 加密算法 MACs []string // 消息摘要算法 User string // 登陆用户 Auth []AuthMethod // 身份验证方法列表 HostKeyCallback HostKeyCallback // 服务端主机公钥验证 BannerCallback BannerCallback // 身份认证前对服务端发送的 Banner 信息的处理。注意,并不是所有的服务端都会发送该信息 ClientVersion string // 必须以 'SSH-1.0-' 或者 'SSH-2.0-' 开头,如果为空,将被替换为 'SSH-2.0-GoSSH' HostKeyAlgorithms []string Timeout time.Duration // 建立 tcp 连接超时时间 }
Config ssh 包下的 ClientConfig 的包装
func DefaultConfigAuthByAgent ¶
DefaultConfigAuthByAgent 生成默认的配置,认证方式为 ssh-agent 认证。 不会主机公钥验证,需要后续添加 HostKeyCallback; user 为登陆用户名
func DefaultConfigAuthByPasswd ¶
DefaultConfigAuthByPasswd 生成默认的配置,认证方式为密码认证。 不会主机公钥验证,需要后续添加 HostKeyCallback; user 为登陆用户名,password 为登陆密码
func DefaultConfigAuthByPrivateKey ¶
DefaultConfigAuthByPrivateKey 生成默认的配置,认证方式为私钥认证。 不会主机公钥验证,需要后续添加 HostKeyCallback; user 为登陆用户名,keys 为多个私钥文件的内容
type Director ¶
type Director struct { NewConnCb NewConnCallback // contains filtered or unexported fields }
func (*Director) BindConnTo ¶
func (d *Director) BindConnTo(lconn net.Conn, netType, addr string, rctx, wctx context.Context) error
BindConnTo 与 BindConnToWithBuffer 相同,但使用默认的 buf
func (*Director) BindConnToWithBuffer ¶
func (d *Director) BindConnToWithBuffer(lconn net.Conn, netType, addr string, bufSize int, rctx, wctx context.Context) error
BindConnToWithBuffer 通过已经建立的 SSH 连接,打开并连接至远程端口,并与给定的流之间进行数据复制,复制时使用给定的 bufSize。 rctx 用于控制远程连接至本地连接的数据传输的 Deadline 以及 cancelFunc 终止控制; wctx 用于控制本地连接至远程连接的数据传输的 Deadline 以及 cancelFunc 终止控制; 如果出现 IO 问题而不是 context 取消执行而导致的错误,双方网络连接将会被关闭 返回 error 不为 nil 表明远程网络连接未成功建立
func (*Director) BindTcpConnTo ¶
func (d *Director) BindTcpConnTo(lconn net.Conn, origin, to *net.TCPAddr, rctx, wctx context.Context) error
BindTcpConnTo 与 BindConnToWithBuffer 相同,但使用默认的 buf
func (*Director) BindTcpConnToWithBuffer ¶
func (d *Director) BindTcpConnToWithBuffer(lconn net.Conn, origin, to *net.TCPAddr, bufSize int, rctx, wctx context.Context) error
BindTcpConnToWithBuffer 与 BindConnToWithBuffer 相似,但只能用于 TCP 连接。 origin 表示源地址以及端口,如果 origin 为 nil, 将被零值(0.0.0.0:0)取代; to 表示要发送至远程服务器的地址以及端口; 返回 error 不为 nil 表明网络连接未成功建立。
func (*Director) DirectTcpToWithBuffer ¶
func (d *Director) DirectTcpToWithBuffer(listener net.Listener, to *net.TCPAddr, bufSize int, ctx context.Context)
DirectTcpToWithBuffer 通过传入的网络监听器接受网络连接,并尝试通过 direct-tcpip 信道打开一个远程端口并开始双向地复制数据。 将会阻塞,直至 Listener.Accept 返回的 err 不为 nil。 通过传入 Context 来控制 Deadline、终止监听以及终止流的复制。
func (*Director) RedirectTcpTo ¶
RedirectTcpTo 与 RedirectTcpToWithBuffer 作用相同,但使用默认的 buffer size
func (*Director) RedirectTo ¶
RedirectTo 与 RedirectToWithBuffer 作用相同,但使用默认的 buffer size
func (*Director) RedirectToWithBuffer ¶
func (d *Director) RedirectToWithBuffer(listener net.Listener, netType, addr string, bufSize int, ctx context.Context)
RedirectToWithBuffer 通过传入的网络监听器接受网络连接,并尝试通过 direct-tcpip 信道打开一个远程端口并开始双向地复制数据。 将会阻塞,直至 Listener.Accept 返回的 err 不为 nil。 通过传入 Context 来控制 Deadline、终止监听以及终止流的复制。
type HostKeyCallback ¶
type KeyboardInteractiveChallenge ¶
type KeyboardInteractiveChallenge func(name, instruction string, questions []string, echos []bool) (answers []string, err error)
KeyboardInteractiveChallenge 应该打印服务端问题,可选择禁用回显(例如密码),并返回所有答案。 KeyboardInteractiveChallenge 可以在单个会话中被多次调用。 认证成功后,服务器可以发送一个不带问题的挑战,应打印名称和指令消息。 RFC 4256 第 3.3 节详细说明了 UI 在 CLI 和 GUI 环境中的行为方式。
type KnownHostsChecker ¶
type KnownHostsChecker struct { Interactively bool // contains filtered or unexported fields }
func (KnownHostsChecker) KnownHostsCheck ¶
KnownHostsCheck 对 hostname 、remote 与 key 进行 known_hosts 匹配。 如果接收器的 interactively 为 true,将会以交互式方式询问是否接受此次连接,并将
type NewChannel ¶
type NewChannel interface { ssh.NewChannel }
type SSHClient ¶
SSHClient 对 ssh.Client 的一层包装
func (*SSHClient) Dial ¶
Dial 发送 direct-tcpip 通道建立请求,通过已经建立的 SSH 连接,连接至远程端口。 netType 为网络类型 tcp、tcp4、tcp6 以及 unix 之一; addr 应为远程服务端可访问的网络接口。 一个经典的应用就是 Open-SSH 的 ssh -L 端口转发
func (*SSHClient) DialTCP ¶
DialTCP 发送 direct-tcpip 通道建立请求,通过已经建立的 SSH 连接,建立TCP连接至远程端口。 netType 为网络类型 tcp、tcp4、tcp6 之一; laddr 表示 tcp 请求来源,如果为 nil,将使用 '0.0.0.0:0';raddr 为远程服务端可访问的地址以及端口
func (*SSHClient) Listen ¶
Listen 发送 tcpip-forward 通道建立请求,通过本次建立的 SSH 信道,任何对 SSH 服务器上目标地址端口的访问都将被转发至本地, 从而监听远程系统端口。 netType 为网络类型 tcp、tcp4、tcp6 以及 unix 之一。 一个最经典的应用就是 Open-SSH 的 ssh -R 端口转发,发送至远程目标端口的连接与数据都将被转发至返回的监听器。
func (*SSHClient) ListenUnix ¶
ListenUnix 类似于 Listen ,监听远程 unix 系统的 unix socket
func (*SSHClient) NewDirector ¶
NewDirector 创建一个 Director
func (*SSHClient) OpenChannel ¶
func (client *SSHClient) OpenChannel(name string, extraData []byte) (Channel, <-chan *ssh.Request, error)
OpenChannel 请求建立一个新的 ssh 通道
func (*SSHClient) OpenSession ¶
OpenSession 打开一个新的 session 通道
type Session ¶
Session 对 ssh.Session 的一个包装,提供了 session 通道的处理工具函数。 对于同一个 Session 实例,任何命令或 shell 的只能执行1次,当收到服务器的 exit-status 消息时,底层的通道将被关闭。 对于绝大部分 SSH 服务器,shell、命令执行都不存在问题,但是环境变量以及信号的请求可能会限制于服务器的具体实现。
func (*Session) AutoUpdateTerminalSize ¶
func (s *Session) AutoUpdateTerminalSize() (context.CancelFunc, error)
AutoUpdateTerminalSize 自动检测窗口变化,并发送给服务端实现远程终端大小的同步。 使用返回的 CancelFunc 取消同步。 如果返回的 error 不为 nil,表明无法获取终端大小。 注意:此函数并不适用于 windows 系统,请用 AutoUpdateTerminalSizeForWindowsOS。
func (*Session) AutoUpdateTerminalSizeForWindowsOS ¶
func (s *Session) AutoUpdateTerminalSizeForWindowsOS(interval time.Duration) (context.CancelFunc, error)
AutoUpdateTerminalSizeForWindowsOS 适用于 Windows 系统的窗口变化自动检测并同步。 interval 为两次检测之间的时间间隔
func (*Session) KeepAlive ¶
KeepAlive 以 interval 为间隔发送请求,保持连接不被中断,这取决于服务器的网络设计以及 SSH 服务请求处理的实现。 当没有成功受到发送的请求的回应次数达到 maxErrRetries 时,将会停止并退出。 maxErrRetries 小于等于 0 时将会一直发送,直至返回函数被调用或出现IO错误。
func (*Session) MakeRow ¶
MakeRow makeRow 禁用输入缓存,若禁用成功,返回恢复函数;否则返回 error 不为 nil 如果恢复函数执行结果为 error 不为 nil,则表明无法恢复文件的原有模式
func (*Session) PreparePty ¶
PreparePty 发送一个 pty-req 请求,附带的窗口大小信息从当前的标准输出文件中获取。 termMode 为 终端色彩模式
func (*Session) PreparePtyWithSize ¶
PreparePtyWithSize 发送一个指定窗口大小的 pty-req 请求。
func (*Session) RedirectInput ¶
RedirectInput 重定向 in 至 session 的输入,返回的 error 不为 nil 表明无法正确地从 session 中获取输入流。
func (*Session) RedirectOutput ¶
RedirectOutput 重定向 session 的输出,返回的 error 不为 nil 表明无法正确地从 session 中获取输出流。
func (*Session) RedirectToSTD ¶
RedirectToSTD 重定向 session 的输入、输出至当前程序的标准输入、输出。
func (*Session) RunForCombineOutput ¶
RunForCombineOutput 执行命令并等待至结束,返回远程执行结果的全部的输出。
func (*Session) RunForOutput ¶
RunForOutput 执行命令并等待至结束,返回远程执行结果的全部的标准输出。
func (*Session) RunWithPty ¶
RunWithPty 先发送 pty-req 请求(窗口大小为当前终端的窗口大小),之后会发送一个 exec 请求。 该函数将会阻塞直至 exit-status 被接收或 IO 出现错误。
func (*Session) SendSignal ¶
SendSignal 发送 signal 请求至服务端;是否起作用取决于服务器的实现。
func (*Session) SendWinChange ¶
SendWinChange 从fd中获取终端大小并与传入参数比较,如果发生变化则向该会话发送一个 window-change 请求。 返回最新检测的窗口宽度与长度
type Signal ¶
type Signal string
Signal ssh 包导出的信号定义
const ( SIGABRT Signal = "ABRT" SIGALRM Signal = "ALRM" SIGFPE Signal = "FPE" SIGHUP Signal = "HUP" SIGILL Signal = "ILL" SIGINT Signal = "INT" SIGKILL Signal = "KILL" SIGPIPE Signal = "PIPE" SIGQUIT Signal = "QUIT" SIGSEGV Signal = "SEGV" SIGTERM Signal = "TERM" SIGUSR1 Signal = "USR1" SIGUSR2 Signal = "USR2" )