in helpers/ssh/stub_ssh_server.go [86:143]
func NewStubServer(user, pass string, opts ...Option) (server *StubSSHServer, err error) {
tempDir, err := os.MkdirTemp("", "ssh-stub-server")
if err != nil {
return nil, err
}
var options Options
for _, opt := range opts {
opt(&options)
}
server = &StubSSHServer{
Options: options,
User: user,
Password: pass,
Config: &ssh.ServerConfig{
PasswordCallback: func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error) {
if conn.User() == user && string(password) == pass {
return nil, nil
}
return nil, fmt.Errorf("wrong password for %q", conn.User())
},
},
stopped: make(chan struct{}),
tempDir: tempDir,
}
privateKeyLocation := filepath.Join(tempDir, "id_rsa_test")
publicKeyLocation := filepath.Join(tempDir, "id_rsa_test.pub")
defer func() {
if err != nil {
os.RemoveAll(tempDir)
}
}()
if err := os.WriteFile(privateKeyLocation, []byte(TestSSHKeyPair.PrivateKey), 0o600); err != nil {
return nil, err
}
if err := os.WriteFile(publicKeyLocation, []byte(TestSSHKeyPair.PublicKey), 0o600); err != nil {
return nil, err
}
key, err := ssh.ParsePrivateKey([]byte(TestSSHKeyPair.PrivateKey))
if err != nil {
return nil, err
}
server.privateKeyLocation = privateKeyLocation
server.Config.AddHostKey(key)
if err := server.start(); err != nil {
return nil, err
}
return server, nil
}