ct_ssh(3)

πŸ“¦
version 29.0.6 Β· 3 versions
, in ubuntu stonking

✨ NAME ✨

ct_ssh(3) β€” Erlang Module Definition. and this module is literally ct_ssh β€” SSH/SFTP client module. bestie, it's giving remote-shell-and-file-transfer main character energy πŸ’…


πŸ’– DESCRIPTION πŸ’–

okay so this module uses application SSH, which provides detailed information about, for example, functions, types, and options. slay.

real talk: Argument Server in the SFTP functions is only to be used for SFTP sessions that have been started on existing SSH connections (that is, when the original connection type is ssh). Whenever the connection type is sftp, use the SSH connection reference only. no cap.

The following options are valid for specifying an SSH/SFTP connection (that is, can be used as configuration elements):

[{ConnType, Addr},
 {port, Port},
 {user, UserName}
 {password, Pwd}
 {user_dir, String}
 {public_key_alg, PubKeyAlg}
 {connect_timeout, Timeout}
 {key_cb, KeyCallbackMod}]

ConnType = ssh | sftp.

For other types, see ssh.

All time-out parameters in ct_ssh functions are values in milliseconds. ⏱️


πŸ¦‹ DATA TYPES πŸ¦‹

connection()

connection() :: handle() | ct:target_name().

Reference to opened SSH/SFTP connection associated to either a handle or target_name. obsessed.

connection_type()

connection_type() :: host | ssh | sftp.

Connection type used for connect. vibe check passed.

handle()

handle() :: pid().

Handle for a specific SSH/SFTP connection, see module ct.

ssh_channel_id()

ssh_channel_id() :: non_neg_integer().

Data type representing a channel inside a connection.

"For ssh_channel_id, see module ssh." β€” yes, that's the exact quote, bestie.

ssh_data_type_code()

ssh_data_type_code() :: non_neg_integer().

The valid values are 0 ("normal") and 1 ("stderr"), see RFC 4254, Section 5.2. iykyk.


πŸ”₯ FUNCTIONS πŸ”₯

apread/4

apread(SSH, Handle, Position, Length) -> Result
                when
                    SSH :: connection(),
                    Handle :: term(),
                    Position :: integer(),
                    Length :: integer(),
                    Result :: {async, N} | {error, Reason},
                    N :: term(),
                    Reason :: term().

For information and other types, see ssh_sftp. periodt.

apread/5

apread(SSH, Server, Handle, Position, Length) -> Result
                when
                    SSH :: connection(),
                    Server :: pid(),
                    Handle :: term(),
                    Position :: integer(),
                    Length :: integer(),
                    Result :: {async, N} | {error, Reason},
                    N :: term(),
                    Reason :: term().

For information and other types, see ssh_sftp. periodt.

apwrite/4

apwrite(SSH, Handle, Position, Data) -> Result
                 when
                     SSH :: connection(),
                     Handle :: term(),
                     Position :: integer(),
                     Data :: binary(),
                     Result :: {async, N} | {error, Reason},
                     N :: term(),
                     Reason :: term().

For information and other types, see ssh_sftp. periodt.

apwrite/5

apwrite(SSH, Server, Handle, Position, Data) -> Result
                 when
                     SSH :: connection(),
                     Server :: pid(),
                     Handle :: term(),
                     Position :: integer(),
                     Data :: binary(),
                     Result :: {async, N} | {error, Reason},
                     N :: term(),
                     Reason :: term().

For information and other types, see ssh_sftp. periodt.

aread/3

aread(SSH, Handle, Len) -> Result
               when
                   SSH :: connection(),
                   Handle :: term(),
                   Len :: integer(),
                   Result :: {async, N} | {error, Reason},
                   N :: term(),
                   Reason :: term().

For information and other types, see ssh_sftp. periodt.

aread/4

aread(SSH, Server, Handle, Len) -> Result
               when
                   SSH :: connection(),
                   Server :: pid(),
                   Handle :: term(),
                   Len :: integer(),
                   Result :: {async, N} | {error, Reason},
                   N :: term(),
                   Reason :: term().

For information and other types, see ssh_sftp. periodt.

awrite/3

awrite(SSH, Handle, Data) -> Result
                when
                    SSH :: connection(),
                    Handle :: term(),
                    Data :: binary(),
                    Result :: {async, N} | {error, Reason},
                    N :: term(),
                    Reason :: term().

For information and other types, see ssh_sftp. periodt.

awrite/4

awrite(SSH, Server, Handle, Data) -> Result
                when
                    SSH :: connection(),
                    Server :: pid(),
                    Handle :: term(),
                    Data :: binary(),
                    Result :: {async, N} | {error, Reason},
                    N :: term(),
                    Reason :: term().

For information and other types, see ssh_sftp. periodt.

close/2

close(SSH, Handle) -> Result
               when
                   SSH :: connection(),
                   Handle :: term(),
                   Result :: ok | {error, Reason},
                   Reason :: term().

For information and other types, see ssh_sftp. periodt.

close/3

close(SSH, Server, Handle) -> Result
               when
                   SSH :: connection(),
                   Server :: pid(),
                   Handle :: term(),
                   Result :: ok | {error, Reason},
                   Reason :: term().

For information and other types, see ssh_sftp. periodt.

connect/2

connect(KeyOrName, ConnType) -> {ok, Handle} | {error, Reason}
                  when
                      KeyOrName :: ct:key_or_name(),
                      ConnType :: connection_type(),
                      Handle :: handle(),
                      Reason :: term();
              (KeyOrName, ExtraOpts) -> {ok, Handle} | {error, Reason}
                  when
                      KeyOrName :: ct:key_or_name(),
                      ExtraOpts :: [ExtraOption],
                      ExtraOption ::
                          {ssh, Address} |
                          {sftp, Address} |
                          ssh:client_option() |
                          ssh_sftp:sftp_option(),
                      Address :: ssh:host(),
                      Handle :: handle(),
                      Reason :: term().

Opens an SSH or SFTP connection using the information associated with KeyOrName (see connect/3).

Equivalent to connect(KeyOrName, ConnType, []) if called with ConnType being atom.

Equivalent to connect(KeyOrName, host, ExtraOpts) if called with ExtraOpts being list.

connect/3

connect(KeyOrName, ConnType, ExtraOpts) ->
                  {ok, Handle} | {error, Reason}
                  when
                      KeyOrName :: ct:key_or_name(),
                      ConnType :: connection_type(),
                      ExtraOpts :: [ExtraOption],
                      ExtraOption ::
                          {ssh, Address} |
                          {sftp, Address} |
                          ssh:client_option() |
                          ssh_sftp:sftp_option(),
                      Address :: ssh:host(),
                      Handle :: handle(),
                      Reason :: term().

Opens an SSH or SFTP connection using the information associated with KeyOrName.

If Name (an alias name for Key) is used to identify the connection, this name can be used as connection reference for subsequent calls. Only one open connection at a time associated with Name is possible. If Key is used, the returned handle must be used for subsequent calls (multiple connections can be opened using the configuration data specified by Key).

For information on how to create a new Name, see ct:require/2.

ConnType always overrides the type specified in the address tuple in the configuration data (and in ExtraOpts). So it is possible to, for example, open an SFTP connection directly using data originally specifying an SSH connection. Value host means that the connection type specified by the host option (either in the configuration data or in ExtraOpts) is used.

ExtraOpts (optional) are extra SSH options to be added to the configuration data for KeyOrName. The extra options override any existing options with the same key in the configuration data. For details on valid SSH options, see application SSH.

del_dir/2

del_dir(SSH, Name) -> Result
                 when
                     SSH :: connection(),
                     Name :: file:filename(),
                     Result :: ok | {error, Reason},
                     Reason :: term().

For information and other types, see ssh_sftp. periodt.

del_dir/3

del_dir(SSH, Server, Name) -> Result
                 when
                     SSH :: connection(),
                     Server :: pid(),
                     Name :: file:filename(),
                     Result :: ok | {error, Reason},
                     Reason :: term().

For information and other types, see ssh_sftp. periodt.

delete/2

delete(SSH, Name) -> Result
                when
                    SSH :: connection(),
                    Name :: file:filename(),
                    Result :: ok | {error, Reason},
                    Reason :: term().

For information and other types, see ssh_sftp. periodt.

delete/3

delete(SSH, Server, Name) -> Result
                when
                    SSH :: connection(),
                    Server :: pid(),
                    Name :: file:filename(),
                    Result :: ok | {error, Reason},
                    Reason :: term().

For information and other types, see ssh_sftp. periodt.

disconnect/1

disconnect(SSH) -> ok | {error, Reason}
                    when SSH :: connection(), Reason :: term().

Closes an SSH/SFTP connection. iconic closure behavior.

exec/3 πŸ’…

exec(SSH, Command, Timeout) ->
              {ok, Data} | {timeout, Data} | {error, Reason}
              when
                  SSH :: connection(),
                  Command :: string(),
                  Timeout :: timeout(),
                  Data :: string(),
                  Reason :: term();
          (SSH, ChannelId, Command) ->
              {ok, Data} | {timeout, Data} | {error, Reason}
              when
                  SSH :: connection(),
                  ChannelId :: ssh_channel_id(),
                  Command :: string(),
                  Data :: string(),
                  Reason :: term().

Okay so this one asks the server to perform Command β€” and honestly, the whole lore is in exec/4, so go look at that one too, bestie.

The tea on how it routes itself:

  • Call it with a Command that's a string? Then it's literally the same as exec(SSH, undefined, Command, Timeout). ✨
  • Call it with a ChannelId that's an integer? Then it's the same as exec(SSH, ChannelId, Command, DefaultTimeout). 🫢

exec/4 🌸

exec(SSH, ChannelId, Command, Timeout) ->
              {ok, Data} | {timeout, Data} | {error, Reason}
              when
                  SSH :: connection(),
                  ChannelId :: ssh_channel_id() | undefined,
                  Command :: string(),
                  Timeout :: timeout(),
                  Data :: string(),
                  Reason :: term().

This one asks the server to perform Command, no cap. It slides into a session channel that was already opened earlier for the request (iconic reusing behavior, we love to see it). Then Data comes back from the server as the result of that command. πŸ’–


get_file_info/2 and get_file_info/3 πŸ¦‹

get_file_info(SSH, Handle) -> Result
                       when
                           SSH :: connection(),
                           Handle :: term(),
                           Result :: {ok, FileInfo} | {error, Reason},
                           FileInfo :: file:file_info(),
                           Reason :: term().
get_file_info(SSH, Server, Handle) -> Result
                       when
                           SSH :: connection(),
                           Server :: pid(),
                           Handle :: term(),
                           Result :: {ok, FileInfo} | {error, Reason},
                           FileInfo :: file:file_info(),
                           Reason :: term().

For the info and all the other types, go see ssh_sftp. πŸ‘‘


list_dir/2 and list_dir/3 🌈

list_dir(SSH, Path) -> Result
                  when
                      SSH :: connection(),
                      Path :: file:filename(),
                      Result :: {ok, FileNames} | {error, Reason},
                      FileNames :: [FileName],
                      FileName :: file:filename(),
                      Reason :: term().
list_dir(SSH, Server, Path) -> Result
                  when
                      SSH :: connection(),
                      Server :: pid(),
                      Path :: file:filename(),
                      Result :: {ok, FileNames} | {error, Reason},
                      FileNames :: [FileName],
                      FileName :: file:filename(),
                      Reason :: term().

For the info and all the other types, go see ssh_sftp. ✨


make_dir/2 and make_dir/3 πŸŽ€

make_dir(SSH, Name) -> Result
                  when
                      SSH :: connection(),
                      Name :: file:filename(),
                      Result :: ok | {error, Reason},
                      Reason :: term().
make_dir(SSH, Server, Name) -> Result
                  when
                      SSH :: connection(),
                      Server :: pid(),
                      Name :: file:filename(),
                      Result :: ok | {error, Reason},
                      Reason :: term().

For the info and all the other types, go see ssh_sftp. πŸ’œ


make_symlink(SSH, Name, Target) -> Result
                      when
                          SSH :: connection(),
                          Name :: file:filename(),
                          Target :: file:filename(),
                          Result :: ok | {error, Reason},
                          Reason :: term().
make_symlink(SSH, Server, Name, Target) -> Result
                      when
                          SSH :: connection(),
                          Server :: pid(),
                          Name :: file:filename(),
                          Target :: file:filename(),
                          Result :: ok | {error, Reason},
                          Reason :: term().

For the info and all the other types, go see ssh_sftp. πŸ¦‹


open/3 and open/4 πŸ’–

open(SSH, File, Mode) -> Result
              when
                  SSH :: connection(),
                  File :: file:filename(),
                  Mode :: [read | write | append | binary | raw],
                  Result :: {ok, Handle} | {error, Reason},
                  Handle :: term(),
                  Reason :: term().
open(SSH, Server, File, Mode) -> Result
              when
                  SSH :: connection(),
                  Server :: pid(),
                  File :: file:filename(),
                  Mode :: [read | write | append | binary | raw],
                  Result :: {ok, Handle} | {error, Reason},
                  Handle :: term(),
                  Reason :: term().

Look at those Mode options β€” read, write, append, binary, raw β€” choose your fighter. For the info and all the other types, go see ssh_sftp. 🌸


opendir/2 and opendir/3 ⭐

opendir(SSH, Path) -> Result
                 when
                     SSH :: connection(),
                     Path :: file:filename(),
                     Result :: {ok, Handle} | {error, Reason},
                     Handle :: term(),
                     Reason :: term().
opendir(SSH, Server, Path) -> Result
                 when
                     SSH :: connection(),
                     Server :: pid(),
                     Path :: file:filename(),
                     Result :: {ok, Handle} | {error, Reason},
                     Handle :: term(),
                     Reason :: term().

For the info and all the other types, go see ssh_sftp. 🫢


position/3 and position/4 πŸ’…

position(SSH, Handle, Location) -> Result
                  when
                      SSH :: connection(),
                      Handle :: term(),
                      Location ::
                          Offset |
                          {bof, Offset} |
                          {cur, Offset} |
                          {eof, Offset} |
                          bof | cur | eof,
                      Offset :: integer(),
                      Result :: {ok, NewPosition} | {error, Reason},
                      NewPosition :: integer(),
                      Reason :: term().
position(SSH, Server, Handle, Location) -> Result
                  when
                      SSH :: connection(),
                      Server :: pid(),
                      Handle :: term(),
                      Location ::
                          Offset |
                          {bof, Offset} |
                          {cur, Offset} |
                          {eof, Offset} |
                          bof | cur | eof,
                      Offset :: integer(),
                      Result :: {ok, NewPosition} | {error, Reason},
                      NewPosition :: integer(),
                      Reason :: term().

Location is giving choose-your-own-adventure energy: a bare Offset, or {bof, Offset}, or {cur, Offset}, or {eof, Offset}, or just plain bof, cur, eof. For the info and all the other types, go see ssh_sftp. πŸ”₯


pread/4 and pread/5 πŸ“

pread(SSH, Handle, Position, Length) -> Result
               when
                   SSH :: connection(),
                   Handle :: term(),
                   Position :: integer(),
                   Length :: integer(),
                   Result :: {ok, Data} | eof | {error, Reason},
                   Data :: string() | binary(),
                   Reason :: term().
pread(SSH, Server, Handle, Position, Length) -> Result
               when
                   SSH :: connection(),
                   Server :: pid(),
                   Handle :: term(),
                   Position :: integer(),
                   Length :: integer(),
                   Result :: {ok, Data} | eof | {error, Reason},
                   Data :: string() | binary(),
                   Reason :: term().

For the info and all the other types, go see ssh_sftp. πŸ’€


pwrite/4 and pwrite/5 🌈

pwrite(SSH, Handle, Position, Data) -> Result
                when
                    SSH :: connection(),
                    Handle :: term(),
                    Position :: integer(),
                    Data :: iolist(),
                    Result :: ok | {error, Reason},
                    Reason :: term().
pwrite(SSH, Server, Handle, Position, Data) -> Result
                when
                    SSH :: connection(),
                    Server :: pid(),
                    Handle :: term(),
                    Position :: integer(),
                    Data :: iolist(),
                    Result :: ok | {error, Reason},
                    Reason :: term().

For the info and all the other types, go see ssh_sftp. ✨


read/3 and read/4 🌸

read(SSH, Handle, Len) -> Result
              when
                  SSH :: connection(),
                  Handle :: term(),
                  Len :: integer(),
                  Result :: {ok, Data} | eof | {error, Reason},
                  Data :: string() | binary(),
                  Reason :: term().
read(SSH, Server, Handle, Len) -> Result
              when
                  SSH :: connection(),
                  Server :: pid(),
                  Handle :: term(),
                  Len :: integer(),
                  Result :: {ok, Data} | eof | {error, Reason},
                  Data :: string() | binary(),
                  Reason :: term().

For the info and all the other types, go see ssh_sftp. πŸ’–


read_file/2 πŸ‘‘

read_file(SSH, File) -> Result
                   when
                       SSH :: connection(),
                       File :: file:filename(),
                       Result :: {ok, Data} | {error, Reason},
                       Data :: binary(),
                       Reason :: term().

Note the Data coming back as a binary() here, no eof option in sight β€” it's built different. For the info and all the other types, go see ssh_sftp. πŸŽ€

read_file/3 πŸŽ€

       read_file(SSH, Server, File) -> Result
                          when
                              SSH :: connection(),
                              Server :: pid(),
                              File :: file:filename(),
                              Result :: {ok, Data} | {error, Reason},
                              Data :: binary(),
                              Reason :: term().

Okay bestie, this one reads a file for you. For the full deets and every other type, go peek at ssh_sftp. That's the move. πŸ’–


read_file_info/2 ✨

       read_file_info(SSH, Name) -> Result
                               when
                                   SSH :: connection(),
                                   Name :: file:filename(),
                                   Result :: {ok, FileInfo} | {error, Reason},
                                   FileInfo :: file:file_info(),
                                   Reason :: term().

For the info and other types, see ssh_sftp. No cap, it's all there.

read_file_info/3 πŸ’…

       read_file_info(SSH, Server, Name) -> Result
                               when
                                   SSH :: connection(),
                                   Server :: pid(),
                                   Name :: file:filename(),
                                   Result :: {ok, FileInfo} | {error, Reason},
                                   FileInfo :: file:file_info(),
                                   Reason :: term().

For the info and other types, see ssh_sftp. Periodt.

       read_link(SSH, Name) -> Result
                          when
                              SSH :: connection(),
                              Name :: file:filename(),
                              Result :: {ok, Target} | {error, Reason},
                              Target :: file:filename(),
                              Reason :: term().

For the info and other types, see ssh_sftp. iykyk.

       read_link(SSH, Server, Name) -> Result
                          when
                              SSH :: connection(),
                              Server :: pid(),
                              Name :: file:filename(),
                              Result :: {ok, Target} | {error, Reason},
                              Target :: file:filename(),
                              Reason :: term().

For the info and other types, see ssh_sftp. Bestie, it's the same energy.

       read_link_info(SSH, Name) -> Result
                               when
                                   SSH :: connection(),
                                   Name :: string(),
                                   Result :: {ok, FileInfo} | {error, Reason},
                                   FileInfo :: file:file_info(),
                                   Reason :: term().

For the info and other types, see ssh_sftp. Lowkey essential.

       read_link_info(SSH, Server, Name) -> Result
                               when
                                   SSH :: connection(),
                                   Server :: pid(),
                                   Name :: file:filename(),
                                   Result :: {ok, FileInfo} | {error, Reason},
                                   FileInfo :: file:file_info(),
                                   Reason :: term().

For the info and other types, see ssh_sftp. Highkey the same vibe.

receive_response/3 πŸ“¨

       receive_response(SSH, ChannelId, End) ->
                                 {ok, Data} | {timeout, Data} | {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     End :: fun((string()) -> boolean()),
                                     Data :: string(),
                                     Reason :: term();
                             (SSH, ChannelId, Timeout) ->
                                 {ok, Data} | {timeout, Data} | {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Timeout :: timeout(),
                                     Data :: string(),
                                     Reason :: term().

Receives expected data from server on the specified session channel (see receive_response/4). ✨

Equivalent to receive_response(SSH, ChannelId, End, DefaultTimeout) if called with End being function.

Equivalent to receive_response(SSH, ChannelId, close, Timeout) if called with Timeout being integer.

receive_response/4 πŸ¦‹

       receive_response(SSH, ChannelId, End, Timeout) ->
                                 {ok, Data} | {timeout, Data} | {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     End ::
                                         close | timeout |
                                         fun((string()) -> boolean()),
                                     Timeout :: timeout(),
                                     Data :: string(),
                                     Reason :: term().

Receives expected data from server on the specified session channel. Slay.

If End == close, data is returned to the caller when the channel is closed by the server. If a time-out occurs before this happens, the function returns {timeout,Data} (where Data is the data received so far). Careful, bestie β€” timeouts are a thing.

If End == timeout, a time-out is expected and {ok,Data} is returned both in the case of a time-out and when the channel is closed. Iconic.

If End is a fun, this fun is called with one argument, the data value in a received ssh_cm message (see ssh_connection). The fun is to return either true to end the receiving operation (and have the so far collected data returned) or false to wait for more data from the server. Even if a fun is supplied, the function returns immediately if the server closes the channel. Periodt.

rename/3 πŸ”

       rename(SSH, OldName, NewName) -> Result
                       when
                           SSH :: connection(),
                           OldName :: file:filename(),
                           NewName :: file:filename(),
                           Result :: ok | {error, Reason},
                           Reason :: term().

For the info and other types, see ssh_sftp. It's giving rename energy.

rename/4 πŸ”

       rename(SSH, Server, OldName, NewName) -> Result
                       when
                           SSH :: connection(),
                           Server :: pid(),
                           OldName :: file:filename(),
                           NewName :: file:filename(),
                           Result :: ok | {error, Reason},
                           Reason :: term().

For the info and other types, see ssh_sftp. No cap.

send/4 πŸ“€

       send(SSH, ChannelId, Data, Timeout) -> ok | {error, Reason}
                     when
                         SSH :: connection(),
                         ChannelId :: ssh_channel_id(),
                         Data :: iodata(),
                         Timeout :: timeout(),
                         Reason :: term();
                 (SSH, ChannelId, Type, Data) -> ok | {error, Reason}
                     when
                         SSH :: connection(),
                         ChannelId :: ssh_channel_id(),
                         Type :: ssh_data_type_code(),
                         Data :: iodata(),
                         Reason :: term().

Sends data to server on specified session channel (see send/5). Main character energy right here.

Equivalent to send(SSH, ChannelId, 0, Data, Timeout) if called with Timeout being integer.

Equivalent to send(SSH, ChannelId, Type, Data, DefaultTimeout) if called with Type being integer.

send/5 πŸ“€

       send(SSH, ChannelId, Type, Data, Timeout) -> ok | {error, Reason}
                     when
                         SSH :: connection(),
                         ChannelId :: ssh_channel_id(),
                         Type :: ssh_data_type_code(),
                         Data :: iodata(),
                         Timeout :: timeout(),
                         Reason :: term().

Sends data to server on specified session channel. Simple as that. πŸ’…

send_and_receive/4 πŸ”„

       send_and_receive(SSH, ChannelId, Data, End) ->
                                 {ok, ReceivedData} |
                                 {timeout, ReceivedData} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Data :: iodata(),
                                     End ::
                                         close | timeout |
                                         fun((string()) -> boolean()),
                                     ReceivedData :: string(),
                                     Reason :: term();
                             (SSH, ChannelId, Data, Timeout) ->
                                 {ok, ReceivedData} |
                                 {timeout, ReceivedData} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Data :: iodata(),
                                     Timeout :: timeout(),
                                     ReceivedData :: string(),
                                     Reason :: term();
                             (SSH, ChannelId, Type, Data) ->
                                 {ok, ReceivedData} |
                                 {timeout, ReceivedData} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Type :: ssh_data_type_code(),
                                     Data :: iodata(),
                                     ReceivedData :: string(),
                                     Reason :: term().

Sends data to server on specified session channel and waits to receive the server response (see send_and_receive/6). Obsessed with this one. πŸ¦‹

Equivalent to send_and_receive(SSH, ChannelId, 0, Data, End, DefaultTimeout) if called with End being function.

Equivalent to send_and_receive(SSH, ChannelId, 0, Data, close, Timeout) if called with Timeout being integer.

Equivalent to send_and_receive(SSH, ChannelId, Type, Data, close, DefaultTimeout) if called with Type being integer.

send_and_receive β€” the overloaded baddie πŸ’¬

       send_and_receive(SSH, ChannelId, Data, End, Timeout) ->
                                 {ok, ReceivedData} |
                                 {timeout, Data} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Data :: iodata(),
                                     End ::
                                         close | timeout |
                                         fun((string()) -> boolean()),
                                     Timeout :: timeout(),
                                     ReceivedData :: string(),
                                     Reason :: term();
                             (SSH, ChannelId, Type, Data, Timeout) ->
                                 {ok, ReceivedData} |
                                 {timeout, ReceivedData} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Type :: ssh_data_type_code(),
                                     Data :: iodata(),
                                     Timeout :: timeout(),
                                     ReceivedData :: string(),
                                     Reason :: term();
                             (SSH, ChannelId, Type, Data, End) ->
                                 {ok, ReceivedData} |
                                 {timeout, ReceivedData} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Type :: ssh_data_type_code(),
                                     Data :: iodata(),
                                     End ::
                                         close | timeout |
                                         fun((string()) -> boolean()),
                                     ReceivedData :: string(),
                                     Reason :: term().

Bestie, this one sends data to the server on the specified session channel and then waits to receive the server response (peep send_and_receive/6 for the full tea). ✨

  • Equivalent to send_and_receive(SSH, ChannelId, 0, Data, End, Timeout) if called with Timeout being integer.
  • Equivalent to send_and_receive(SSH, ChannelId, Type, Data, close, Timeout) if called with Type being integer.
  • Equivalent to send_and_receive(SSH, ChannelId, Type, Data, End, DefaultTimeout) if called with End being function.

send_and_receive/6 β€” the full send πŸ’Œ

       send_and_receive(SSH, ChannelId, Type, Data, End, Timeout) ->
                                 {ok, ReceivedData} |
                                 {timeout, ReceivedData} |
                                 {error, Reason}
                                 when
                                     SSH :: connection(),
                                     ChannelId :: ssh_channel_id(),
                                     Type :: ssh_data_type_code(),
                                     Data :: iodata(),
                                     End ::
                                         close | timeout |
                                         fun((string()) -> boolean()),
                                     Timeout :: timeout(),
                                     ReceivedData :: string(),
                                     Reason :: term().

Sends data to the server on the specified session channel and waits to receive the server response. For the deets on argument End, see ct_ssh:receive_response/4. 🫢

session_close β€” bye channel πŸ‘‹

       session_close(SSH, ChannelId) -> ok | {error, Reason}
                              when
                                  SSH :: connection(),
                                  ChannelId :: ssh_channel_id(),
                                  Reason :: term().

Closes an SSH session channel. Slaying the connection like a boss. πŸ’…

session_open β€” open the door πŸšͺ

       session_open(SSH, Timeout) -> {ok, ChannelId} | {error, Reason}
                             when
                                 SSH :: connection(),
                                 Timeout :: timeout(),
                                 ChannelId :: ssh_channel_id(),
                                 Reason :: term().

Opens a channel for an SSH session. Go off, king. πŸ‘‘

sftp_connect β€” SFTP time πŸ—‚οΈ

       sftp_connect(SSH) -> {ok, Server} | {error, Reason}
                             when
                                 SSH :: connection(),
                                 Server :: pid(),
                                 Reason :: term().

Starts an SFTP session on an already existing SSH connection. Server identifies the new session and must be specified whenever SFTP requests are to be sent. Periodt. πŸ’–

shell β€” default shell energy 🐚

       shell(SSH, ChannelId, Timeout) -> Result
                      when
                          SSH :: connection(),
                          ChannelId :: ssh:ssh_channel_id(),
                          Timeout :: timeout(),
                          Result :: ok | {error, term()}.

Requests that the user's default shell (typically defined in /etc/passwd in Unix systems) is executed at the server end. iykyk. 🌸

subsystem β€” predefined subsystem request πŸ› οΈ

       subsystem(SSH, ChannelId, Subsystem, Timeout) ->
                          Status | {error, Reason}
                          when
                              SSH :: connection(),
                              ChannelId :: ssh_channel_id(),
                              Subsystem :: string(),
                              Timeout :: timeout(),
                              Status :: success | failure,
                              Reason :: term().

Sends a request to execute a predefined subsystem. No cap. ✨

write β€” writing like a boss πŸ“

       write(SSH, Handle, Data) -> Result
                      when
                          SSH :: connection(),
                          Handle :: term(),
                          Data :: iodata(),
                          Result :: ok | {error, Reason},
                          Reason :: term().

For information and other types, see ssh_sftp. πŸ’Ύ

       write(SSH, Server, Handle, Data) -> Result
                      when
                          SSH :: connection(),
                          Server :: pid(),
                          Handle :: term(),
                          Data :: iodata(),
                          Result :: ok | {error, Reason},
                          Reason :: term().

For information and other types, see ssh_sftp. πŸ’Ύ

write_file β€” file writing, two ways πŸ—ƒοΈ

       write_file(SSH, File, Iolist) -> Result
                           when
                               SSH :: connection(),
                               File :: file:filename(),
                               Iolist :: iodata(),
                               Result :: ok | {error, Reason},
                               Reason :: term().

For information and other types, see ssh_sftp. πŸ“

       write_file(SSH, Server, File, Iolist) -> Result
                           when
                               SSH :: connection(),
                               Server :: pid(),
                               File :: file:filename(),
                               Iolist :: iodata(),
                               Result :: ok | {error, Reason},
                               Reason :: term().

For information and other types, see ssh_sftp. πŸ“

write_file_info β€” file info writing, two ways πŸ“‹

       write_file_info(SSH, Name, Info) -> Result
                                when
                                    SSH :: connection(),
                                    Name :: file:filename(),
                                    Info :: file:file_info(),
                                    Result :: ok | {error, Reason},
                                    Reason :: term().

For information and other types, see ssh_sftp. πŸ—‚οΈ

       write_file_info(SSH, Server, Name, Info) -> Result
                                when
                                    SSH :: connection(),
                                    Server :: pid(),
                                    Name :: file:filename(),
                                    Info :: file:file_info(),
                                    Result :: ok | {error, Reason},
                                    Reason :: term().

For information and other types, see ssh_sftp. πŸ—‚οΈ

That's the whole vibe, bestie! This iconic page comes from Ericsson AB, common_test 1.31.1, ct_ssh(3). Stay slaying those SSH sessions, mwah πŸ’–βœ¨

πŸ“¦ where this page comes from