This backend is no longer maintained and replaced by the docker backend. Please see the deprecation notice for details.
This library implements a backend that connects to a Docker socket and launches a new container for each connection, then runs executes a separate command per channel.
⚠⚠⚠ Warning: This is a developer documentation. ⚠⚠⚠
The user documentation for ContainerSSH is located at containerssh.io.
This library implements a NetworkConnectionHandler
from the sshserver library. This can be embedded into a connection handler.
The network connection handler can be created with the New()
method:
var client net.TCPAddr
connectionID := "0123456789ABCDEF"
config := dockerrun.Config{
//...
}
dr, err := dockerrun.New(client, connectionID, config, logger)
if err != nil {
// Handle error
}
The logger
parameter is a logger from the ContainerSSH logger library.
The dr
variable can then be used to create a container on finished handshake:
ssh, err := dr.OnHandshakeSuccess("provided-connection-username")
Conversely, on disconnect you must call dr.OnDisconnect()
. The ssh
variable can then be used to create session channels:
var channelID uint64 = 0
extraData := []byte{}
session, err := ssh.OnSessionChannel(channelID, extraData)
Finally, the session can be used to launch programs:
var requestID uint64 = 0
err = session.OnEnvRequest(requestID, "foo", "bar")
// ...
requestID = 1
var stdin io.Reader
var stdout, stderr io.Writer
err = session.OnShell(
requestID,
stdin,
stdout,
stderr,
func(exitStatus ExitStatus) {
// ...
},
)