@@ -52,8 +52,11 @@ func Start(so *startOptions) error {
52
52
return err
53
53
}
54
54
55
- if err := waitForSSH (so .vm , 10 ); err != nil {
56
- return err
55
+ // When --ssh is enabled, wait until SSH service started on port 22 at most N seconds
56
+ if ssh := so .vm .Spec .SSH ; ssh != nil && ssh .Generate && len (so .vm .Status .IPAddresses ) > 0 {
57
+ if err := waitForSSH (so .vm , 10 , 5 ); err != nil {
58
+ return err
59
+ }
57
60
}
58
61
59
62
// If starting interactively, attach after starting
@@ -64,36 +67,32 @@ func Start(so *startOptions) error {
64
67
}
65
68
66
69
func dialSuccess (vm * ignite.VM , seconds int ) error {
67
- // When --ssh is enabled, wait until SSH service started on port 22 at most N seconds
68
- ssh := vm .Spec .SSH
69
- if ssh != nil && ssh .Generate && len (vm .Status .IPAddresses ) > 0 {
70
- addr := vm .Status .IPAddresses [0 ].String () + ":22"
71
- perSecond := 10
72
- delay := time .Second / time .Duration (perSecond )
73
- var err error
74
- for i := 0 ; i < seconds * perSecond ; i ++ {
75
- conn , dialErr := net .DialTimeout ("tcp" , addr , delay )
76
- if conn != nil {
77
- defer conn .Close ()
78
- err = nil
79
- break
80
- }
81
- err = dialErr
82
- time .Sleep (delay )
70
+ addr := vm .Status .IPAddresses [0 ].String () + ":22"
71
+ perSecond := 10
72
+ delay := time .Second / time .Duration (perSecond )
73
+ var err error
74
+ for i := 0 ; i < seconds * perSecond ; i ++ {
75
+ conn , dialErr := net .DialTimeout ("tcp" , addr , delay )
76
+ if conn != nil {
77
+ defer conn .Close ()
78
+ err = nil
79
+ break
83
80
}
84
- if err != nil {
85
- if err , ok := err .(* net.OpError ); ok && err .Timeout () {
86
- return fmt .Errorf ("Tried connecting to SSH but timed out %s" , err )
87
- }
88
- return err
81
+ err = dialErr
82
+ time .Sleep (delay )
83
+ }
84
+ if err != nil {
85
+ if err , ok := err .(* net.OpError ); ok && err .Timeout () {
86
+ return fmt .Errorf ("Tried connecting to SSH but timed out %s" , err )
89
87
}
88
+ return err
90
89
}
91
90
92
91
return nil
93
92
}
94
93
95
- func waitForSSH (vm * ignite.VM , seconds int ) error {
96
- if err := dialSuccess (vm , seconds ); err != nil {
94
+ func waitForSSH (vm * ignite.VM , dialSeconds , sshTimeout int ) error {
95
+ if err := dialSuccess (vm , dialSeconds ); err != nil {
97
96
return err
98
97
}
99
98
@@ -110,25 +109,20 @@ func waitForSSH(vm *ignite.VM, seconds int) error {
110
109
}
111
110
112
111
config := & ssh.ClientConfig {
113
- User : "user" ,
114
- Auth : []ssh.AuthMethod {
115
- ssh .Password ("password" ),
116
- },
117
112
HostKeyCallback : certCheck .CheckHostKey ,
118
- Timeout : 5 * time .Second ,
113
+ Timeout : time . Duration ( sshTimeout ) * time .Second ,
119
114
}
120
115
121
116
addr := vm .Status .IPAddresses [0 ].String () + ":22"
122
117
sshConn , err := ssh .Dial ("tcp" , addr , config )
123
118
if err != nil {
124
- // If error contains "unable to authenticate", it seems able to connect the server
125
- errString := err .Error ()
126
- if strings .Contains (errString , "unable to authenticate" ) {
119
+ if strings .Contains (err .Error (), "unable to authenticate" ) {
120
+ // we connected to the ssh server and recieved the expected failure
127
121
return nil
128
122
}
129
123
return err
130
124
}
131
125
132
- sshConn .Close ()
133
- return fmt .Errorf ("timed out checking SSH server " )
126
+ defer sshConn .Close ()
127
+ return fmt .Errorf ("waitForSSH: connected successfully with no authentication -- failure was expected " )
134
128
}
0 commit comments