chipsenkbeil / distant

🚧 (Alpha stage software) Library and tooling that supports remote filesystem and process operations. 🚧
https://distant.dev
579 stars 12 forks source link

Cannot connect through SSH: `[Session(-43)] Failed getting banner` #240

Closed itaranto closed 10 months ago

itaranto commented 10 months ago

Cannot connect through SSH neither via distant connect or distant launch.

The error I get is:

Failed to connect to server

Caused by:
    Fatal: ssh handshake with localhost:22: [Session(-43)] Failed getting banner

I see the follwing in the manager logs (journalctl --user -u distant-manager.service):

Started distant-manager.service - distant-manager.
Usage: sss_ssh_knownhostsproxy [-?k] [-?|--help] [--usage] [-p|--port=INT]
        [-d|--domain=STRING] [-k|--pubkey] HOST [PROXY_COMMAND]

It seems the parameters passed to sss_ssh_knownhostsproxy aren't quite right.

Unfortunately, running the manger with distant manager service start --user --log-level trace doesn't seem to show how sss_ssh_knownhostsproxy is being invoked.

Environment: distant version: 0.20.0 OpenSSH version: 9.0p1 SSSD version: 2.9.4 OS: Fedora 38

chipsenkbeil commented 10 months ago

This seems to happen with some ssh servers and our use of some C ssh libraries. Until https://github.com/chipsenkbeil/distant/issues/193 is implemented, you can try switching the ssh client library used as described in the options for ssh.

Specifically, change the ssh.backend to libssh. I have to do this when using distant at work:

distant connect ssh://example.com --options 'backend=libssh'

The default backend is ssh2 as a client library. Both have issues, which hopefully will be resolved by switching to a native Rust implementation in the future.

itaranto commented 10 months ago

This seems to happen with some ssh servers and our use of some C ssh libraries. Until #193 is implemented, you can try switching the ssh client library used as described in the options for ssh.

Specifically, change the ssh.backend to libssh. I have to do this when using distant at work:

distant connect ssh://example.com --options 'backend=libssh'

The default backend is ssh2 as a client library. Both have issues, which hopefully will be resolved by switching to a native Rust implementation in the future.

Good to know then.

Regarding switching to backend=libssh, that made the error go away but it still doesn't work. All I get is a number being printed to stdout, for example:

$ distant connect ssh://foo@bar --options 'backend=libssh,verbose=true'
Password:
1941100921

Also, after checking, I realized I didn't have libssh2 installed in the first place. But after installing it the "banner" error remains the same. I guess that's because distant statically links libssh2.

chipsenkbeil commented 10 months ago

The number is the ID of the connection after succeeding. Did you try distant fs read . or distant shell?

itaranto commented 10 months ago

The number is the ID of the connection after succeeding. Did you try distant fs read . or distant shell?

Right :man_facepalming: I should have read the docs :smile:

distant shell worked like a charm.

chipsenkbeil commented 10 months ago

Glad it worked for you!

github-actions[bot] commented 9 months ago

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues. If you have found a problem that seems similar to this, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.