Awa_mirage.MakeSSH 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_errorval pp_error : error Fmt.tval pp_write_error : write_error Fmt.tval write : flow -> Cstruct.t -> (unit, write_error) Stdlib.result Lwt.tval writev : flow -> Cstruct.t list -> (unit, write_error) Stdlib.result Lwt.tval shutdown : flow -> [ `read | `read_write | `write ] -> unit Lwt.tval close : flow -> unit Lwt.tval 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.tclient_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.tval spawn_server :
?stop:Lwt_switch.t ->
Awa.Server.t ->
Auth.db ->
Awa.Ssh.message list ->
F.flow ->
exec_callback ->
t Lwt.tspawn_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 flowNOTE: 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.