Commit Graph

46 Commits

Author SHA1 Message Date
78e3556787 reintroduced ClientInfo because it does appear to work.
Most likely some error elsewhere caused it not to work previously
2024-09-08 11:16:49 +02:00
2b9a9f550d test multiple clients now working with a fully concurrent registration
of clients.
2024-09-08 11:16:49 +02:00
0cd0b543a2 multiple clients connecting to multiple agents.
Clients cannot yet be started in parallel. due to subtle issue in test
setup with accept
2024-09-08 11:16:49 +02:00
6e97162923 using AssertReadData/AssertWriteData now where possible. 2024-09-08 11:16:49 +02:00
563c8f2ca7 added leak detection using the goleak library 2024-09-08 11:16:49 +02:00
28b2545163 test for connecting clients and bidirectional communication to agent.
Required lots of rework since the GOBChannel appeared to be reading
ahead of the data it actually needed. Now using more low-level IO
to send the clientId over to the agent instead.
2024-09-08 11:16:49 +02:00
eb6da5da99 test case for single agent registration. 2024-09-08 11:16:49 +02:00
fd3c3eb50a fix in comments. 2024-09-08 11:16:49 +02:00
0bc3548354 agentlistener tested. 2024-09-08 11:16:49 +02:00
80488fa7c8 test for initialization failure when connection is closed. 2024-09-08 11:16:49 +02:00
465dc1108f protocol version test implemented between agent and server (and found
that it did not work)
2024-09-08 11:16:49 +02:00
ea0b4282ba test for ListenForAgentEvents implemented. 2024-09-08 11:16:49 +02:00
7b7827824e added initialization test 2024-09-08 11:16:49 +02:00
d6912316a8 minor cleanup 2024-09-08 11:16:49 +02:00
2a663c19d2 added a few tests for inmemoryconnection. 2024-09-08 11:16:49 +02:00
f82f656b50 fixed issue with ChannelReadWriter for unbuffered channels.
Was a concurrency issue int he Write method that retained the
slice p that was passed in, making concurrency issues much more likely
with unbuffered channels.
2024-09-08 11:16:49 +02:00
cfed204af5 bidirectional communication now tested. 2024-09-08 11:16:49 +02:00
1ca7209588 tested connections through the session. 2024-09-08 11:16:49 +02:00
bf837d31b2 basic gobchannel tests now done. 2024-09-08 11:16:49 +02:00
2e8107ddbd discovered net.Pipe for testing tcp connnections which makes the
previously developed ChannelReadWriter and InmemoryConnection obsolete.
2024-09-08 11:16:49 +02:00
d3d4c7242a restructuring test code by introducing a testsupport package
Making it easy 6to start a porof server in tests.
2024-09-08 11:16:49 +02:00
3f3635b056 a lot of progress in setting up tests for the communication.
Wrote ChannelReadWriter that simulates a connection inmemory.
This is used by the agentserver test for testing the initialization. The
first test is already working.
2024-09-08 11:16:49 +02:00
974b4b9ad0 more symmetry. SetupHeartBeat froma agent to server now done in separate
call.
2024-09-08 11:16:49 +02:00
00dd0d17c6 hostkey is now sent from the server to the agent so that at a later
stage we can make the hostkey conrfigurable at the server level instead
of using a fixed hardcoded key.
2024-09-08 11:16:49 +02:00
427ebb2c78 more docs. 2024-09-08 11:16:49 +02:00
2d426f8db3 using unbuffered channels everywhere now. Only change required was to initialize prometeus and the websessions before the matchmaker. This is because at startup the matchmaker wants to write a notification when it starts up but then prometheus and the websessions would not be there to read them.
Alternative solution would be to run all initialization code in go routines to make it independent of initialization order but having a defined initialization order is much cleaner.
2024-09-08 11:16:49 +02:00
4f06fd71e0 renamed modukle name so that pkgsite will work. 2024-09-08 11:16:49 +02:00
061fabfd07 Addes agent address and client address to the client and agent info. 2024-09-08 11:16:49 +02:00
f3d0074f17 added environment info from the client. 2024-09-08 11:16:49 +02:00
2366b78e95 ClientId is now a string instead of an int. 2024-09-08 11:16:49 +02:00
cd953c5edf eliminated the username. 2024-09-08 11:16:49 +02:00
Erik Brakkee
d109c72f66 removed password based access
authorized keys can now be modified within the session.
keep last set of keys when no valid keys were found and keys are changed during the session .
2024-09-08 11:16:49 +02:00
adee89cc08 Now by default wsproxy uses a specific protocol to establish connections to the server. It does this by adding the ?wsproxy query parameter.
The server then sends it the protocol version and the client connection info describing whether an agent was found or not. This improves usability for users.

With the --raw option it bypasses this query parameter and wsproxy then works in the old way as a simple stdio-websocket connector. It then still works with converge server but can also be used for simple websocket troubleshooting.
2024-09-08 11:16:49 +02:00
Erik Brakkee
882f97fa17 many small changes
* removed the Async utility
* now using Ping message to webclient for keep alive instaed of actual content
* added remote shell to AgentInfo
* retry of connections to the agent
* better logging for SynchronizeStreams
2024-09-08 11:16:49 +02:00
100771a7ba restructuring 2024-09-08 11:16:49 +02:00
60d641a1a4 When a duplicate id is requested the server now allocates a new unique id so that the session can be handled anyway. 2024-09-08 11:16:49 +02:00
816e8d8609 refactoring towards being able to send events from Admin to UI (websocket) without exposing connection info but only metadata. 2024-09-08 11:16:49 +02:00
e01a2bc729 Added pprof to convergeserver and optionally to
the agent if PPROF_PORT is set.

Fixed issue with converge server not cleaning up goroutines because of blocking channel. Made sure to create channels with > 1 size everywhere it can be done. The blocking behavior of a default channel size is mostly in the way.

Known issue: Killing the SSH client will lead to the server side process not being terminated and some goroutines still running in the agent. This would require additional investigation to solve. The remote processes are still being cleaned up ok (at least on linux) when the agent exits.

This should not be an issue at all since the agent is a short-lived process and when running in a containerized environment with containers running on demand the cleanup will definitely work.
2024-09-08 11:16:49 +02:00
788050df32 Unique ids for clients generated by converge server and made available to the ssh session through a net.Conn extension that passes the ID to the SSH session through the LocalAddr(). 2024-09-08 11:16:49 +02:00
9d0675b2f2 initialization of username, password on client (from server) and initialization of agentinfo on server is now done as soon as the agent registered and not through a side channel.
Making use of some simple utilities for GOB to make it easy to send objects over the line.
2024-09-08 11:16:49 +02:00
ada34495ef GOB channel for easily and asynchronously using GOB on a single network connection, also dealing with timeouts and errors in a good way.
Protocol version is now checked when the agent connects to the converge server.

Next up: sending connection metadata and username password from server to agent and sending environment information back to the server. This means then that the side channel will only be used for expiry time messages and session type with the client id passed in so the converge server can than correlate the results back to the correct channel.
2024-09-08 11:16:49 +02:00
d3cbf8388f Lots of refactoring.
Now hijacking the ssh connection setup in the listener to exchange some information before passing the connection on to the SSH server.

Next step is to do the full exchange of required information and to make it easy some simple Read and Write methods with timeouts are needed that use gob.
2024-09-08 11:16:49 +02:00
Erik Brakkee
d839583f7b communication between agent and server. Removed the flags libray for command-line parsing.
Heartbeat mechanism from client to server over the custom connection for sending events to guarantee that the connectoin stays up.
2024-09-08 11:16:48 +02:00
40e8d56429 removed read and write dead lines. Appears to be still working. 2024-09-08 11:16:48 +02:00
6f4929301d status update now reported to the server. More robustness needed. 2024-09-08 11:16:48 +02:00
ffeca2a533 First version with basic communication from agent to server working. 2024-09-08 11:16:48 +02:00