sshutil

package
v2.3.0-beta.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2026 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// FormatCmd prints the full ssh command line.
	//
	//	ssh -o IdentityFile="/Users/example/.lima/_config/user" -o User=example -o Hostname=127.0.0.1 -o Port=60022 lima-default
	FormatCmd = FormatT("cmd")

	// FormatArgs is similar to FormatCmd but omits "ssh" and the destination address.
	//
	//	-o IdentityFile="/Users/example/.lima/_config/user" -o User=example -o Hostname=127.0.0.1 -o Port=60022
	FormatArgs = FormatT("args")

	// FormatOptions prints the ssh option key value pairs.
	//
	//	IdentityFile="/Users/example/.lima/_config/user"
	//	User=example
	//	Hostname=127.0.0.1
	//	Port=60022
	FormatOptions = FormatT("options")

	// FormatConfig uses the ~/.ssh/config format
	//
	//	Host lima-default
	//	  IdentityFile "/Users/example/.lima/_config/user "
	//	  User example
	//	  Hostname 127.0.0.1
	//	  Port 60022
	FormatConfig = FormatT("config")
)
View Source
const EnvShellSSH = "SSH"

Environment variable that allows configuring the command (alias) to execute in place of the 'ssh' executable.

Variables

Formats is the list of the supported formats.

Functions

func CommonOpts

func CommonOpts(ctx context.Context, sshExe SSHExe, toolPath string, useDotSSH bool) ([]string, error)

CommonOpts returns ssh option key-value pairs like {"IdentityFile=/path/to/id_foo"}. The result may contain different values with the same key.

The result always contains the IdentityFile option. The result never contains the Port option.

Path options take toolPath's form, for the binary that ends up reading them. scp hands its options to the ssh beside itself, which need not be sshExe. Version detection still runs against sshExe, since only ssh reports a version.

func CompanionForSSH

func CompanionForSSH(sshExe SSHExe, tool string) string

CompanionForSSH returns tool from the same toolchain as sshExe. NewSSHExe can select an ssh outside PATH, so resolving a companion by bare name can pick a different toolchain than the one PathForSSH formats paths for. It returns tool unchanged on non-Windows, or when no sibling exists, leaving it to PATH.

func DetectOpenSSHVersion

func DetectOpenSSHVersion(ctx context.Context, sshExe SSHExe) semver.Version

func DisableControlMasterOptsFromSSHArgs

func DisableControlMasterOptsFromSSHArgs(sshArgs []string) []string

DisableControlMasterOptsFromSSHArgs returns ssh args that disable ControlMaster, ControlPath, and ControlPersist.

func Format

func Format(w io.Writer, sshPath, instName string, format FormatT, opts []string) error

Format formats the ssh options.

func IsControlMasterExisting

func IsControlMasterExisting(instDir string) bool

IsControlMasterExisting returns true if the control socket file exists.

func IsControlMasterRunning added in v2.2.0

func IsControlMasterRunning(ctx context.Context, instDir string) bool

IsControlMasterRunning reports whether an SSH ControlMaster process is actively listening on the instance's control socket. Unlike IsControlMasterExisting, which only checks that the socket file is present, this dials the socket to verify that a master is alive. A stale socket left behind by an unclean master exit (kill -9, OOM, host crash, or the Cygwin emulation file outliving its process) has no listener and returns false.

func ParseOpenSSHVersion

func ParseOpenSSHVersion(version []byte) *semver.Version

func PathForSSH added in v2.2.0

func PathForSSH(ctx context.Context, sshExe SSHExe, orig string) (string, error)

PathForSSH converts orig to the path form Lima's ssh-family invocations expect; unchanged on non-Windows. On Windows, Cygwin-based ssh (Git for Windows, MSYS2) gets a /c/Users/... form from the sibling cygpath, which respects the toolchain's fstab; native Windows OpenSSH gets forward slashes (C:/Users/...), which native ssh, ssh-keygen, and scp accept. It is a convenience wrapper for callers holding an SSHExe; PathForTool takes the binary's path directly.

func PathForTool

func PathForTool(ctx context.Context, toolPath, orig string) (string, error)

PathForTool is PathForSSH keyed to an arbitrary binary, for a tool that Lima resolves separately from ssh. Pass the tool's own path so the form follows the toolchain that reads it, whether the tool parses the path itself or hands it to the ssh beside it. Callers whose tool is Cygwin-based on every Windows host should convert through cygpath directly instead: the native form this returns as a fallback would be wrong for them.

func RemoveStaleControlMaster added in v2.2.0

func RemoveStaleControlMaster(ctx context.Context, instDir string) (bool, error)

RemoveStaleControlMaster removes the SSH control socket only when no master process is listening on it. It returns true when a stale socket was removed. A live master's socket is never touched (returns false), and a missing socket is treated as a no-op (returns false). This lets callers recover from a wedged session without clobbering a healthy ControlMaster.

func SSHArgsFromOpts

func SSHArgsFromOpts(opts []string) []string

SSHArgsFromOpts returns ssh args from opts. The result always contains {"-F", "/dev/null} in addition to {"-o", "KEY=VALUE", ...}.

func SSHOpts

func SSHOpts(ctx context.Context, sshExe SSHExe, instDir, username string, useDotSSH, forwardAgent, forwardX11, forwardX11Trusted bool) ([]string, error)

SSHOpts adds the following options to CommonOpts: User, ControlMaster, ControlPath, ControlPersist, and whichever of ForwardAgent, ForwardX11, and ForwardX11Trusted the caller asks for.

func SSHOptsRemovingControlPath

func SSHOptsRemovingControlPath(opts []string) []string

SSHOptsRemovingControlPath removes ControlMaster, ControlPath, and ControlPersist options from SSH options.

func SSHOptsWithoutMultiplexing

func SSHOptsWithoutMultiplexing(ctx context.Context, sshExe SSHExe, toolPath, username string, useDotSSH bool) ([]string, error)

SSHOptsWithoutMultiplexing returns CommonOpts plus an explicit User, adding neither multiplexing nor forwarding options. Use it for invocations that cannot share a control socket: native Windows OpenSSH has no multiplexing, and Cygwin ssh's is unreliable. It builds no control path, so the caller also escapes the socket length limit SSHOpts enforces. Path options take toolPath's form; pass sshExe.Exe unless another binary receives the options, as described on CommonOpts.

func SftpServerForSSH added in v2.2.0

func SftpServerForSSH(ctx context.Context, sshExe SSHExe) string

SftpServerForSSH returns the path of sftp-server binary from sshExe's toolchain, so the server behind a reverse-sshfs mount comes from the same install as the ssh driving it. For Cygwin-based ssh the sibling cygpath resolves /usr/lib/ssh/sftp-server; for native OpenSSH it is sftp-server.exe beside ssh.exe. Returns "" on non-Windows, empty input, or no match, leaving the caller to fall back to its library's auto-detection.

Types

type FormatT

type FormatT = string

FormatT specifies the format type.

type PubKey

type PubKey struct {
	Filename string
	Content  string
}

func DefaultPubKeys

func DefaultPubKeys(ctx context.Context, loadDotSSH bool) ([]PubKey, error)

DefaultPubKeys returns the public key from $LIMA_HOME/_config/user.pub. The key will be created if it does not yet exist.

When loadDotSSH is true, ~/.ssh/*.pub will be appended to make the VM accessible without specifying an identity explicitly.

type SSHExe

type SSHExe struct {
	Exe  string
	Args []string
}

func NewSSHExe

func NewSSHExe() (SSHExe, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL