Library
Module
Module type
Parameter
Class
Class type
SSH module given a flow
possible errors: incoming alert, processing failure, or a problem in the underlying flow.
The type for write errors.
we provide the FLOW interface
include Mirage_flow.S
with type error := error
and type write_error := write_error
val pp_error : error Fmt.t
val pp_write_error : write_error Fmt.t
val write : flow -> Cstruct.t -> (unit, write_error) Stdlib.result Lwt.t
val writev : flow -> Cstruct.t list -> (unit, write_error) Stdlib.result Lwt.t
val shutdown : flow -> [ `read | `read_write | `write ] -> unit Lwt.t
val close : flow -> unit Lwt.t
val client_of_flow :
?authenticator:Awa.Keys.authenticator ->
user:string ->
[ `Pubkey of Awa.Hostkey.priv | `Password of string ] ->
Awa.Ssh.channel_request ->
F.flow ->
(flow, error) Stdlib.result Lwt.t
client_of_flow ~authenticator ~user key channel_request flow
upgrades the existing connection to SSH, mutually authenticates, opens a channel and sends the channel request.
type request =
type exec_callback = request -> unit Lwt.t
val spawn_server :
?stop:Lwt_switch.t ->
Awa.Server.t ->
Awa.Ssh.message list ->
F.flow ->
exec_callback ->
t Lwt.t
spawn_server ?stop server msgs flow callback
launches an internal SSH channels handler which can be stopped by stop
. This SSH channels handler will call callback
for every new channels requested by the client. msgs
are the SSH hello given by Awa.Server.make
which returns also a Awa.Server.t
required here.
A basic usage of spawn_server
is:
let ssh_channel_handler _cmd _ic _oc _ec =
Lwt.return_unit
let tcp_handler flow =
let server, msgs = Awa.Server.make private_key db in
SSH.spawn_server server msgs flow ssh_handler >>= fun _t ->
close flow
NOTE: Even if the ssh_channel_handler
is fulfilled, spawn_server
continues to handle SSH channels. Only stop
can really stop the internal SSH channels handler.