mirror of
https://github.com/zrepl/zrepl.git
synced 2024-11-26 02:14:44 +01:00
ce25c01c7e
How it works: `zrepl stdinserver CLIENT_IDENTITY` * connects to the socket in $global.serve.stdinserver.sockdir/CLIENT_IDENTITY * sends its stdin / stdout file descriptors to the `zrepl daemon` process (see cmsg(3)) * does nothing more This enables a setup where `zrepl daemon` is not directly exposed to the internet but instead all traffic is tunnelled through SSH. The server with the source job has an authorized_keys file entry for the public key used by the corresponding pull job command="/mnt/zrepl stdinserver CLIENT_IDENTITY" ssh-ed25519 AAAAC3NzaC1E... zrepl@pullingserver
41 lines
713 B
Go
41 lines
713 B
Go
package cmd
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/zrepl/zrepl/rpc"
|
|
"github.com/zrepl/zrepl/zfs"
|
|
)
|
|
|
|
type Config struct {
|
|
Global Global
|
|
Jobs map[string]Job
|
|
}
|
|
|
|
type Global struct {
|
|
Serve struct {
|
|
Stdinserver struct {
|
|
SockDir string
|
|
}
|
|
}
|
|
}
|
|
|
|
type RPCConnecter interface {
|
|
Connect() (rpc.RPCClient, error)
|
|
}
|
|
type AuthenticatedChannelListenerFactory interface {
|
|
Listen() (AuthenticatedChannelListener, error)
|
|
}
|
|
|
|
type AuthenticatedChannelListener interface {
|
|
Accept() (ch io.ReadWriteCloser, err error)
|
|
Close() (err error)
|
|
}
|
|
|
|
type SSHStdinServerConnectDescr struct {
|
|
}
|
|
|
|
type PrunePolicy interface {
|
|
Prune(fs zfs.DatasetPath, versions []zfs.FilesystemVersion) (keep, remote []zfs.FilesystemVersion, err error)
|
|
}
|