libsshpp v0.1.7
Modern C++17 wrapper for libssh
Loading...
Searching...
No Matches
session.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2#pragma once
3
4#include <sshpp/auth.hpp>
6#include <sshpp/channel.hpp>
7#include <sshpp/config.hpp>
10#include <sshpp/export.hpp>
12#include <sshpp/key.hpp>
13#include <sshpp/known_hosts.hpp>
14#include <sshpp/library.hpp>
15#include <sshpp/result.hpp>
17
18#include <initializer_list>
19#include <string>
20
21namespace sshpp {
22
23#if SSHPP_WITH_SFTP
24namespace sftp { class Sftp; }
25#endif
26#if SSHPP_WITH_SCP
27namespace scp { class Reader; class Writer; enum class Mode; }
28#endif
29#if SSHPP_WITH_FORWARDING
30class RemoteForwardListener;
31class LocalForward;
32class RemoteForward;
33#endif
34
38
41class SSHPP_API Session {
42public:
44 explicit Session(const SessionOptions&);
46 Session(Session&&) noexcept;
47 Session& operator=(Session&&) noexcept;
48 Session(const Session&) = delete;
49 Session& operator=(const Session&) = delete;
50
51 explicit operator bool() const noexcept { return core_ && core_->valid(); }
52 native_session native_handle() const noexcept { return core_ ? core_->raw() : nullptr; }
53
54 // ---- options ---------------------------------------------------------
55 Result<void> try_set_options(const SessionOptions&);
56 void set_options(const SessionOptions&);
57 const SessionOptions& configured_options() const noexcept { return options_; }
58
59 // ---- connection ------------------------------------------------------
60 Result<void> try_connect();
61 void connect();
62 void disconnect() noexcept;
63 [[nodiscard]] bool is_connected() const noexcept;
64
65 int socket_fd() const noexcept;
66
67 void request_cancel() noexcept { if (core_) core_->request_cancel(); }
68 void clear_cancel() noexcept { if (core_) core_->clear_cancel(); }
69 bool cancel_requested() const noexcept { return core_ && core_->cancel_requested(); }
70
71 // ---- peer information -------------------------------------------------
72 Result<std::string> try_server_banner() const;
73 Result<std::string> try_client_banner() const;
74 NegotiatedAlgorithms negotiated() const;
75
76 // ---- host key ----------------------------------------------------------
77 Result<PublicKey> try_server_public_key() const;
78 Result<KnownHostsStatus> try_check_known_host() const;
79 Result<void> try_update_known_hosts();
80 Result<void> try_verify_host_key(const HostKeyVerifier&);
81 void verify_host_key(const HostKeyVerifier&);
82
83 // ---- authentication -------------------------------------------------------
84 Result<AuthMethods> try_auth_methods();
85 Result<AuthStatus> try_authenticate(const Authenticator&);
86 void authenticate(const Authenticator&);
87 Result<AuthStatus> try_authenticate(std::initializer_list<const Authenticator*>);
88 bool authenticated() const noexcept { return authenticated_; }
89
90 // ---- subsystem factories ---------------------------------------------------
91 Result<Channel> try_open_channel();
92 Channel open_channel();
93#if SSHPP_WITH_SFTP
94 Result<sftp::Sftp> try_open_sftp();
95#endif
96#if SSHPP_WITH_SCP
97 Result<scp::Reader> try_open_scp_read(const RemotePath&, bool recursive = false);
98 Result<scp::Writer> try_open_scp_write(const RemotePath&, bool recursive = false);
99#endif
100
101 // ---- diagnostics ------------------------------------------------------------
102 void set_log_level(LogLevel);
103
104private:
105 friend class HostKeyVerifier;
106 friend class Channel;
107#if SSHPP_WITH_SFTP
108 friend class sftp::Sftp;
109#endif
110#if SSHPP_WITH_SCP
111 friend class scp::Reader;
112 friend class scp::Writer;
113#endif
114#if SSHPP_WITH_FORWARDING
115 friend class RemoteForwardListener;
116 friend class LocalForward;
117 friend class RemoteForward;
118#endif
119
121 SessionOptions options_;
122 bool authenticated_ = false;
123};
124
125} // namespace sshpp
126
127#if SSHPP_HEADER_ONLY
129#endif
Authentication strategy interface. See docs/design/04 §4.4.
Definition auth.hpp:21
Definition channel.hpp:36
Policy object consulted by Session::verify_host_key(). See docs/design/04 §4.6.
Definition host_key_verifier.hpp:25
Definition forwarding.hpp:98
Definition forwarding.hpp:66
ssh -R equivalent: accept loop that connects each inbound channel to a local endpoint.
Definition forwarding.hpp:139
Definition types.hpp:76
Definition result.hpp:16
Definition session.hpp:41
bool authenticated() const noexcept
Definition session.hpp:88
bool cancel_requested() const noexcept
Definition session.hpp:69
void clear_cancel() noexcept
Definition session.hpp:68
native_session native_handle() const noexcept
Definition session.hpp:52
Session(Session &&) noexcept
const SessionOptions & configured_options() const noexcept
Definition session.hpp:57
Pull side of an SCP transfer: scp -f as seen by the client.
Definition scp.hpp:45
Push side of an SCP transfer: scp -t as seen by the client.
Definition scp.hpp:71
The SFTP subsystem session. See docs/design/06 §6.2.
Definition sftp.hpp:45
std::shared_ptr< SessionCore > SessionCorePtr
Definition session_core.hpp:43
Mode
Definition scp.hpp:26
Definition auth.hpp:18
LogLevel
Definition library.hpp:15
::ssh_session_struct * native_session
Definition native_fwd.hpp:25
Definition session.hpp:35
std::string hmac_out
Definition session.hpp:36
std::string kex
Definition session.hpp:36
std::string hmac_in
Definition session.hpp:36
std::string cipher_in
Definition session.hpp:36
std::string cipher_out
Definition session.hpp:36
std::string host_key
Definition session.hpp:36
Definition session_options.hpp:25