X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a699e7edea2e2a0384ff331c3f78a2e9ba8da294..b28098a9199e87659046307129b9226749ebf9b6:/lib/config/load.go diff --git a/lib/config/load.go b/lib/config/load.go index 9269ddf27f..d504f7796c 100644 --- a/lib/config/load.go +++ b/lib/config/load.go @@ -26,6 +26,7 @@ import ( "github.com/imdario/mergo" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" + "golang.org/x/crypto/ssh" "golang.org/x/sys/unix" ) @@ -690,3 +691,17 @@ func (ldr *Loader) RegisterMetrics(reg *prometheus.Registry) { vec.WithLabelValues(hash).Set(float64(ldr.loadTimestamp.UnixNano()) / 1e9) reg.MustRegister(vec) } + +// Load an SSH private key from the given confvalue, which is either +// the literal key or an absolute path to a file containing the key. +func LoadSSHKey(confvalue string) (ssh.Signer, error) { + if fnm := strings.TrimPrefix(confvalue, "file://"); fnm != confvalue && strings.HasPrefix(fnm, "/") { + keydata, err := os.ReadFile(fnm) + if err != nil { + return nil, err + } + return ssh.ParsePrivateKey(keydata) + } else { + return ssh.ParsePrivateKey([]byte(confvalue)) + } +}