mirror of
https://github.com/containers/podman.git
synced 2025-10-16 02:32:55 +08:00
only read ssh_config for non machine connections
For machine we know we have all the info we need so there is no reason to read and parse another file. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
@ -162,69 +162,74 @@ func sshClient(_url *url.URL, uri string, identity string, machine bool) (Connec
|
||||
return connection, err
|
||||
}
|
||||
}
|
||||
// ssh_config
|
||||
alias := _url.Hostname()
|
||||
cfg := ssh_config.DefaultUserSettings
|
||||
cfg.IgnoreErrors = true
|
||||
found := false
|
||||
|
||||
if userinfo == nil {
|
||||
if val := cfg.Get(alias, "User"); val != "" {
|
||||
userinfo = url.User(val)
|
||||
// only parse ssh_config when we are not connecting to a machine
|
||||
// For machine connections we always have the full URL in the
|
||||
// system connection so reading the file is just unnecessary.
|
||||
if !machine {
|
||||
alias := _url.Hostname()
|
||||
cfg := ssh_config.DefaultUserSettings
|
||||
cfg.IgnoreErrors = true
|
||||
found := false
|
||||
|
||||
if userinfo == nil {
|
||||
if val := cfg.Get(alias, "User"); val != "" {
|
||||
userinfo = url.User(val)
|
||||
found = true
|
||||
}
|
||||
}
|
||||
// not in url or ssh_config so default to current user
|
||||
if userinfo == nil {
|
||||
u, err := user.Current()
|
||||
if err != nil {
|
||||
return connection, fmt.Errorf("current user could not be determined: %w", err)
|
||||
}
|
||||
userinfo = url.User(u.Username)
|
||||
}
|
||||
|
||||
if val := cfg.Get(alias, "Hostname"); val != "" {
|
||||
uri = val
|
||||
found = true
|
||||
}
|
||||
}
|
||||
// not in url or ssh_config so default to current user
|
||||
if userinfo == nil {
|
||||
u, err := user.Current()
|
||||
if err != nil {
|
||||
return connection, fmt.Errorf("current user could not be determined: %w", err)
|
||||
|
||||
if port == 0 {
|
||||
if val := cfg.Get(alias, "Port"); val != "" {
|
||||
if val != ssh_config.Default("Port") {
|
||||
port, err = strconv.Atoi(val)
|
||||
if err != nil {
|
||||
return connection, fmt.Errorf("port is not an int: %s: %w", val, err)
|
||||
}
|
||||
found = true
|
||||
}
|
||||
}
|
||||
}
|
||||
// not in ssh config or url so use default 22 port
|
||||
if port == 0 {
|
||||
port = 22
|
||||
}
|
||||
userinfo = url.User(u.Username)
|
||||
}
|
||||
|
||||
if val := cfg.Get(alias, "Hostname"); val != "" {
|
||||
uri = val
|
||||
found = true
|
||||
}
|
||||
|
||||
if port == 0 {
|
||||
if val := cfg.Get(alias, "Port"); val != "" {
|
||||
if val != ssh_config.Default("Port") {
|
||||
port, err = strconv.Atoi(val)
|
||||
if err != nil {
|
||||
return connection, fmt.Errorf("port is not an int: %s: %w", val, err)
|
||||
if identity == "" {
|
||||
if val := cfg.Get(alias, "IdentityFile"); val != "" {
|
||||
identity = strings.Trim(val, "\"")
|
||||
if strings.HasPrefix(identity, "~/") {
|
||||
homedir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return connection, fmt.Errorf("failed to find home dir: %w", err)
|
||||
}
|
||||
identity = filepath.Join(homedir, identity[2:])
|
||||
}
|
||||
found = true
|
||||
}
|
||||
}
|
||||
}
|
||||
// not in ssh config or url so use default 22 port
|
||||
if port == 0 {
|
||||
port = 22
|
||||
}
|
||||
|
||||
if identity == "" {
|
||||
if val := cfg.Get(alias, "IdentityFile"); val != "" {
|
||||
identity = strings.Trim(val, "\"")
|
||||
if strings.HasPrefix(identity, "~/") {
|
||||
homedir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return connection, fmt.Errorf("failed to find home dir: %w", err)
|
||||
}
|
||||
identity = filepath.Join(homedir, identity[2:])
|
||||
}
|
||||
found = true
|
||||
if found {
|
||||
logrus.Debugf("ssh_config alias found: %s", alias)
|
||||
logrus.Debugf(" User: %s", userinfo.Username())
|
||||
logrus.Debugf(" Hostname: %s", uri)
|
||||
logrus.Debugf(" Port: %d", port)
|
||||
logrus.Debugf(" IdentityFile: %q", identity)
|
||||
}
|
||||
}
|
||||
|
||||
if found {
|
||||
logrus.Debugf("ssh_config alias found: %s", alias)
|
||||
logrus.Debugf(" User: %s", userinfo.Username())
|
||||
logrus.Debugf(" Hostname: %s", uri)
|
||||
logrus.Debugf(" Port: %d", port)
|
||||
logrus.Debugf(" IdentityFile: %q", identity)
|
||||
}
|
||||
conn, err := ssh.Dial(&ssh.ConnectionDialOptions{
|
||||
Host: uri,
|
||||
Identity: identity,
|
||||
|
Reference in New Issue
Block a user