MCPcopy
hub / github.com/nirui/sshwifty / remote

Method remote

application/commands/ssh.go:382–552  ·  view source on GitHub ↗
(
	user string, address string, authMethodBuilder sshAuthMethodBuilder)

Source from the content-addressed store, hash-verified

380}
381
382func (d *sshClient) remote(
383 user string, address string, authMethodBuilder sshAuthMethodBuilder) {
384 defer func() {
385 d.w.Signal(command.HeaderClose)
386
387 close(d.remoteConnReceive)
388 d.remoteCloseWait.Done()
389 }()
390
391 buf := [4096]byte{}
392
393 conn, clearConnInitialDeadline, dErr :=
394 d.dialRemote("tcp", address, &ssh.ClientConfig{
395 User: user,
396 Auth: authMethodBuilder(buf[:]),
397 HostKeyCallback: func(h string, r net.Addr, k ssh.PublicKey) error {
398 return d.comfirmRemoteFingerprint(h, r, k, buf[:])
399 },
400 Timeout: d.cfg.DialTimeout,
401 })
402
403 if dErr != nil {
404 errLen := copy(buf[d.w.HeaderSize():], dErr.Error()) + d.w.HeaderSize()
405 d.w.SendManual(SSHServerConnectFailed, buf[:errLen])
406
407 d.l.Debug("Unable to connect to remote machine: %s", dErr)
408
409 return
410 }
411
412 defer conn.Close()
413
414 session, sErr := conn.NewSession()
415
416 if sErr != nil {
417 errLen := copy(buf[d.w.HeaderSize():], sErr.Error()) + d.w.HeaderSize()
418 d.w.SendManual(SSHServerConnectFailed, buf[:errLen])
419
420 d.l.Debug("Unable open new session on remote machine: %s", sErr)
421
422 return
423 }
424
425 defer session.Close()
426
427 in, inErr := session.StdinPipe()
428
429 if inErr != nil {
430 errLen := copy(buf[d.w.HeaderSize():], inErr.Error()) + d.w.HeaderSize()
431 d.w.SendManual(SSHServerConnectFailed, buf[:errLen])
432
433 d.l.Debug("Unable export Stdin pipe: %s", inErr)
434
435 return
436 }
437
438 out, outErr := session.StdoutPipe()
439

Callers 1

BootupMethod · 0.95

Calls 11

dialRemoteMethod · 0.95
closeFunction · 0.85
HeaderSizeMethod · 0.80
SendManualMethod · 0.80
WaitMethod · 0.80
ErrorMethod · 0.65
DebugMethod · 0.65
CloseMethod · 0.65
SignalMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected