非常教程

Erlang 20参考手册

ssh

ssh_connection

模块

ssh_connection

模块摘要

该模块提供API函数,将SSH连接协议事件发送到SSH通道的另一端。

描述

SSH Connection Protocol所使用的客户机和服务器,即,SSH通道,过SSH连接进行通信。该模块中的API函数发送SSH连接协议事件,这些事件通过远程通道作为消息接收。如果接收通道是Erlang进程,则消息具有格式{ssh_cm, ssh_connection_ref(), ssh_event_msg()}。如果ssh_channel行为用于实现通道处理,则这些消息由处理handle_ssh_msg/2

数据类型

在此模块中多次使用的类型定义,或抽象表示数据类型的预期用途,或两者:

boolean() =

true | false

string() =

ASCII字符列表

timeout() =

infinity | integer()以毫秒为单位

ssh_connection_ref() =

opaque() - 由ssh:connect/3SSH通道进程返回或发送到该进程

ssh_channel_id() =

integer()

ssh_data_type_code() =

1(“stderr”)| 0(“正常”)是有效值,请参见RFC 4254第5.2节。

ssh_request_status() =

success | failure

event() =

{ssh_cm, ssh_connection_ref(), ssh_event_msg()}

ssh_event_msg() =

data_events() | status_events() | terminal_events()

reason() =

timeout | closed

data_events()**{data, ssh_channel_id(), ssh_data_type_code(), Data :: binary()} **

数据已经抵达频道。此事件是作为调用的结果发送的ssh_connection:send/[3,4,5]

{eof, ssh_channel_id()}

表示对方不再发送数据。此事件是作为调用的结果发送的ssh_connection:send_eof/2

status_events()**{signal, ssh_channel_id(), ssh_signal()} **

使用以下消息可以将信号传递到远程过程/服务。某些系统不支持信号,在这种情况下,他们将忽略此信息。目前没有函数可以产生这个事件,因为所涉及的信号是在OS级而不是由Erlang程序产生的。

{exit_signal, ssh_channel_id(), ExitSignal :: string(), ErrorMsg ::string(), LanguageString :: string()}

由于信号,远程执行可能会强烈终止。然后可以收到此消息。有关有效字符串值的详细信息,请参见RFC 4254第6.10节,其中显示了这些信号的特例。

{exit_status, ssh_channel_id(), ExitStatus :: integer()}

当在另一端运行的命令终止时,可以发送以下消息来返回命令的退出状态。零exit_status通常意味着命令成功终止。此事件是作为调用的结果发送的ssh_connection:exit_status/3

{closed, ssh_channel_id()}

此事件是作为调用的结果发送的ssh_connection:close/2。这个事件的处理和发送都由该ssh_channel行为来处理。

terminal_events()

在服务器端实现shell和命令执行的通道是处理客户端通道进程可以发送的以下消息。

包含WantReply期望事件处理过程以ssh_connection:reply_request/4布尔值WantReply作为第二个参数调用的事件。

{env, ssh_channel_id(), WantReply :: boolean(), Var ::string(), Value :: string()}

环境变量可以传递给shell /命令以便稍后启动。此事件是作为调用的结果发送的ssh_connection:setenv/5

{pty, ssh_channel_id(), WantReply :: boolean(), {Terminal :: string(), CharWidth :: integer(), RowHeight :: integer(), PixelWidth :: integer(), PixelHeight :: integer(), TerminalModes :: [{Opcode :: atom() | integer(), Value :: integer()}]}}

该会议已请求伪终端。 终端是TERM环境变量值的值,即vt100。 零维参数必须被忽略。 字符/行的尺寸覆盖像素尺寸(当非零时)。 像素尺寸是指窗口的可绘制区域。 TerminalModes列表中的操作码是助记符的名称,表示为RFC 4254第8部分定义的小写Erlang原子。如果助记符名称未在RFC中列出,它也可以是操作码。 例如:OP代码:53,助记符名称ECHO erlang atom:echo。 此事件是由于调用ssh_connection:ptty_alloc / 4而发送的。

{shell, WantReply :: boolean()}

该消息要求用户默认的shell在另一端启动。此事件是作为调用的结果发送的ssh_connection:shell/2

{window_change, ssh_channel_id(), CharWidth() :: integer(), RowHeight :: integer(), PixWidth :: integer(), PixHeight :: integer()}

当客户端的窗口(终端)大小发生变化时,它可以向服务器端发送一条消息,通知它新的维度。没有API函数生成此事件。

{exec, ssh_channel_id(), WantReply :: boolean(), Cmd :: string()}

该消息请求服务器开始执行给定的命令。此事件是作为调用ssh_connection:exec/4的结果发送的

输出

adjust_window(ConnectionRef, ChannelId, NumOfBytes) -> ok

类型

调整SSH流控制窗口。这将由客户端和服务器端通道进程来完成。

实现的通道。ssh_channel行为通常不需要调用此函数,因为流控制是由行为处理的。每次回调时,行为都会调整窗口。handle_ssh_msg/2处理通道数据后返回。

close(ConnectionRef, ChannelId) -> ok

类型

服务器或客户端通道进程可以通过发送关闭事件来选择关闭会话。

此函数由ssh_channel终止通道时的行为,请参见ssh_channel(3)因此,使用此行为实现的通道不显式调用此函数。

exec(ConnectionRef, ChannelId, Command, TimeOut) -> ssh_request_status() | {error, reason()}

类型

由客户端通道进程调用,请求服务器开始执行给定的命令。结果是按照以下模式发送多条消息。最后一条消息是通道关闭消息,因为exec请求是一次执行,在完成时关闭通道。

N x {ssh_cm, ssh_connection_ref(), {data, ssh_channel_id(), ssh_data_type_code(), Data :: binary()}}

根据命令的不同,执行命令的结果只能是一行或数千行。

0 or 1 x {ssh_cm, ssh_connection_ref(), {eof, ssh_channel_id()}}

指示不再发送数据。

0 or 1 x {ssh_cm, ssh_connection_ref(), {exit_signal, ssh_channel_id(), ExitSignal :: string(), ErrorMsg :: string(), LanguageString :: string()}}

不是所有的系统都发送信号。有关有效字符串值的详细信息,请参阅rfc 4254,第6.10节。

0 or 1 x {ssh_cm, ssh_connection_ref(), {exit_status, ssh_channel_id(), ExitStatus :: integer()}}

SSH连接协议建议发送此消息,但情况并不总是这样。

1 x {ssh_cm, ssh_connection_ref(), {closed, ssh_channel_id()}}

指示ssh_channel开始执行的命令现在已经关闭。

exit_status(ConnectionRef, ChannelId, Status) -> ok

类型

由服务器通道进程调用,以便将命令的退出状态发送到客户端。

ptty_alloc(ConnectionRef, ChannelId, Options) ->ptty_alloc(ConnectionRef, ChannelId, Options, Timeout) -> > ssh_request_status() | {error, reason()}

类型

发送一个SSH连接协议pty_req,分配一个伪终端。将由SSH客户端进程调用。

备选方案:

{term, string()}

默认为os:getenv(“TERM”),如果未定义,则为vt100

{width, integer()}

默认为80,如果pixel_width没有定义。

{height, integer()}

默认为24,如果pixel_height没有定义。

{pixel_width, integer()}

被忽略,如果width被定义。

{pixel_height, integer()}

被忽略,如果height被定义。

{pty_opts, {posix_atom(), integer()}}

选项可以是一个空列表。否则,请参阅第8节中的可能的POSIX名称。 RFC 4254

reply_request(ConnectionRef, WantReply, Status, ChannelId) -> ok

类型

发送状态回复给请求者声明它想要状态报告的请求,也就是说WantReply = true。如果WantReplyfalse,调用这个函数成为“noop”。在处理包含WantReply布尔值的SSH连接协议消息时要被调用。

send(ConnectionRef, ChannelId, Data) ->send(ConnectionRef, ChannelId, Data, Timeout) ->send(ConnectionRef, ChannelId, Type, Data) ->send(ConnectionRef, ChannelId, Type, Data, TimeOut) -> ok | {error, timeout} | {error, closed}

类型

由客户端和服务器通道进程调用,以便相互发送数据。

函数subsystem/4和随后的调用send/3,4,5必须在同一个进程中执行。

send_eof(ConnectionRef, ChannelId) -> ok | {error, closed}

类型

在信道上发送EOFChannelId...

session_channel(ConnectionRef, Timeout) ->session_channel(ConnectionRef, InitialWindowSize, MaxPacketSize, Timeout) -> {ok, ssh_channel_id()} | {error, reason()}

类型

打开SSH会话的通道。从该函数返回的通道id是用作此模块中其他函数的输入的id。

setenv(ConnectionRef, ChannelId, Var, Value, TimeOut) -> ssh_request_status() | {error, reason()}

类型

可以在启动shell/命令之前传递环境变量。由客户端通道进程调用。

shell(ConnectionRef, ChannelId) -> ssh_request_status() | {error, closed}

类型

由客户端通道进程调用,以请求在服务器端执行用户默认shell(通常在Unix系统的/ etc / passwd中定义)。

subsystem(ConnectionRef, ChannelId, Subsystem, Timeout) -> ssh_request_status() | {error, reason()}

类型

由客户端通道进程调用,用于请求在服务器上执行预定义的子系统。

函数subsystem/4和随后的调用send/3,4,5必须在同一个进程中执行。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1