pkg / sftp

SFTP support for the go.crypto/ssh package
BSD 2-Clause "Simplified" License
1.5k stars 379 forks source link

sftp.NewClient returns "EOF" error #506

Open mraxrorxon opened 2 years ago

mraxrorxon commented 2 years ago

I create sshClient like this: if sshClient, err = ssh.Dial("tcp", addr, clientConfig); err != nil { return nil, err }; and sshClient is created successfully, after that create sftp client like this:

if sftpClient, err = sftp.NewClient(sshClient); err != nil { return nil, err } here I get an error "EOF" Please help this, where is a problam?

puellanivis commented 2 years ago

Could you maybe share the whole of your function(s)? And encase it in a triple-backtick code block? There is not really enough information here to diagnose what might be going on.

npsables commented 2 years ago

My problem was the section Subsystem in /etc/ssh/sshd_config of the target server was wrong or missing. Fixed by correcting this section then restart the service.

But to be honest, the error io.EOF returned is very confusing, maybe we should add diagnosis here?

func (c *Client) recvVersion() error {
    typ, data, err := c.recvPacket(0)
    if err == io.EOF {
        // do some diagnose here
        err = nil
    }
       ...
}
puellanivis commented 2 years ago

Hm… yeah, we could probably do something there, but there’s not much to diagnose at that point. If we get an EOF there, then we’re stuck in an unrecoverable state. However, we could use fmt.Errorf("problem receiving version packet: %w", err) or maybe even convert it to io.ErrUnexpectedEOF as well.

npsables commented 2 years ago

Yea, and maybe we should add some comments if someone has the same problem. Hope this help someone.