
Some checks are pending
checklocks / checklocks (push) Waiting to run
CodeQL / Analyze (go) (push) Waiting to run
Dockerfile build / deploy (push) Waiting to run
CI / race-root-integration (1/4) (push) Waiting to run
CI / race-root-integration (2/4) (push) Waiting to run
CI / race-root-integration (3/4) (push) Waiting to run
CI / race-root-integration (4/4) (push) Waiting to run
CI / test (-coverprofile=/tmp/coverage.out, amd64) (push) Waiting to run
CI / test (-race, amd64, 1/3) (push) Waiting to run
CI / test (-race, amd64, 2/3) (push) Waiting to run
CI / test (-race, amd64, 3/3) (push) Waiting to run
CI / test (386) (push) Waiting to run
CI / windows (push) Waiting to run
CI / privileged (push) Waiting to run
CI / vm (push) Waiting to run
CI / race-build (push) Waiting to run
CI / cross (386, linux) (push) Waiting to run
CI / cross (amd64, darwin) (push) Waiting to run
CI / cross (amd64, freebsd) (push) Waiting to run
CI / cross (amd64, openbsd) (push) Waiting to run
CI / cross (amd64, windows) (push) Waiting to run
CI / cross (arm, 5, linux) (push) Waiting to run
CI / cross (arm, 7, linux) (push) Waiting to run
CI / cross (arm64, darwin) (push) Waiting to run
CI / cross (arm64, linux) (push) Waiting to run
CI / cross (arm64, windows) (push) Waiting to run
CI / cross (loong64, linux) (push) Waiting to run
CI / ios (push) Waiting to run
CI / crossmin (amd64, illumos) (push) Waiting to run
CI / crossmin (amd64, plan9) (push) Waiting to run
CI / crossmin (amd64, solaris) (push) Waiting to run
CI / crossmin (ppc64, aix) (push) Waiting to run
CI / android (push) Waiting to run
CI / wasm (push) Waiting to run
CI / tailscale_go (push) Waiting to run
CI / fuzz (push) Waiting to run
CI / depaware (push) Waiting to run
CI / go_generate (push) Waiting to run
CI / go_mod_tidy (push) Waiting to run
CI / licenses (push) Waiting to run
CI / staticcheck (386, windows) (push) Waiting to run
CI / staticcheck (amd64, darwin) (push) Waiting to run
CI / staticcheck (amd64, linux) (push) Waiting to run
CI / staticcheck (amd64, windows) (push) Waiting to run
CI / notify_slack (push) Blocked by required conditions
CI / check_mergeability (push) Blocked by required conditions
update-flake / update-flake (push) Waiting to run
This reverts commit 46fd4e58a2
.
We don't want to include this in 1.80 yet, but can add it back post 1.80.
Updates #8593
Signed-off-by: Percy Wegmann <percy@tailscale.com>
85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package ssh
|
|
|
|
import (
|
|
"os"
|
|
|
|
gossh "github.com/tailscale/golang-x-crypto/ssh"
|
|
)
|
|
|
|
// PasswordAuth returns a functional option that sets PasswordHandler on the server.
|
|
func PasswordAuth(fn PasswordHandler) Option {
|
|
return func(srv *Server) error {
|
|
srv.PasswordHandler = fn
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// PublicKeyAuth returns a functional option that sets PublicKeyHandler on the server.
|
|
func PublicKeyAuth(fn PublicKeyHandler) Option {
|
|
return func(srv *Server) error {
|
|
srv.PublicKeyHandler = fn
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// HostKeyFile returns a functional option that adds HostSigners to the server
|
|
// from a PEM file at filepath.
|
|
func HostKeyFile(filepath string) Option {
|
|
return func(srv *Server) error {
|
|
pemBytes, err := os.ReadFile(filepath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
signer, err := gossh.ParsePrivateKey(pemBytes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
srv.AddHostKey(signer)
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func KeyboardInteractiveAuth(fn KeyboardInteractiveHandler) Option {
|
|
return func(srv *Server) error {
|
|
srv.KeyboardInteractiveHandler = fn
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// HostKeyPEM returns a functional option that adds HostSigners to the server
|
|
// from a PEM file as bytes.
|
|
func HostKeyPEM(bytes []byte) Option {
|
|
return func(srv *Server) error {
|
|
signer, err := gossh.ParsePrivateKey(bytes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
srv.AddHostKey(signer)
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// NoPty returns a functional option that sets PtyCallback to return false,
|
|
// denying PTY requests.
|
|
func NoPty() Option {
|
|
return func(srv *Server) error {
|
|
srv.PtyCallback = func(ctx Context, pty Pty) bool {
|
|
return false
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WrapConn returns a functional option that sets ConnCallback on the server.
|
|
func WrapConn(fn ConnCallback) Option {
|
|
return func(srv *Server) error {
|
|
srv.ConnCallback = fn
|
|
return nil
|
|
}
|
|
}
|