SSH into Devices running old versions of Dropbear SSH (e.g. UniFi APs, and other routers)
After a lot of investigation in a thread on slack over the past 2 days, I discovered that 1Password's ssh-agent doesn't support logging into UniFi Access Points, which are running an old version of Dropbear SSH. This is an alternative SSH implementation that's commonly used on low power devices like routers and access points.
I'm just posting this here for anyone else who may encounter this issue trying to log into a similar device.
If you also have trouble logging into a device running Dropbear, check the version:
# ssh -V Dropbear v2017.75
That version of Dropbear only supports ssh-rsa signatures and not rsa-sha2-256 or rsa-sha2-512. Support for these signature algorithms were added in version 2020.79.
Routers with OpenWRT firmware installed on them also run Dropbear. If you have this, this may be a problem for you depending on when you most recently updated the firmware.
The ssh logs when this occurs will look something like this:
$ ssh -vvv 10.0.1.10 ... debug3: sign_and_send_pubkey: signing using ssh-rsa SHA256:<redacted fingerprint> sign_and_send_pubkey: signing failed for RSA "" from agent: agent refused operation ...
1Password's logs show this error:
[1P:/Users/builder/builds/BhfSvM9x/0/dev/core/core/ssh/op-ssh-agent/src/lib.rs:306] Error handling sign request: Key(expected RSA signature algorithm, but found a Ed25519 one)
If you encounter this problem, upgrade your device firmware if possible, or complain to the vendor that their devices are running an out of date SSH server.
Thanks to @K.J._1P for helping to figure this out with me in slack.
1Password Version: Not Provided
Extension Version: Not Provided
OS Version: Not Provided
Comments
-
My ASUS router runs Asuswrt-Merlin (third-party) firmware that also uses Dropbear.
Luckily it's more up-to-date:
ASUSWRT-Merlin RT-AC86U 386.4_0 Sat Jan 1 18:43:23 UTC 2022 ➜ ssh -V Dropbear v2020.81
I can successfully log in to that router using the 1Password SSH Agent :)
0 -
OpenSSH 8.8 has also disabled sha-rsa by default, so anyone running that client would also have difficulty using ssh keys with these old ssh servers.
https://www.openssh.com/txt/release-8.8
However, they do apparently provide a way to explicitly re-enable it for old hosts according to those release notes.
Host old-host HostkeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa
This doesn't work with the 1Password ssh-agent.
0 -
I have the same issue with a few Mikrotik routers, even on their latest RouterOS 7.x. I use the ssh client in WSL (Windows subsystem for Linux) and as a workaround i unset SSH_AUTH_SOCK and load the key from the filesystem using the -i to ssh.
0 -
I have a similar issue, but with openssh on UniFi Cloud Key
Server: OpenSSH_7.4p1 Debian-10+deb9u7, OpenSSL 1.0.2u 20 Dec 2019
Error: sign_and_send_pubkey: signing failed for RSA "" from agent: agent refused operationWorking linux box is Server: OpenSSH_8.4p1 Ubuntu-6ubuntu2.1, OpenSSL 1.1.1l 24 Aug 2021
Client is: OpenSSH_8.6p1, LibreSSL 3.3.5
Key works fine if I do a -i in and unset SSH_AUTH_SOCK
0 -
I found this error in the logs:
ERROR 2022-03-24T15:24:37.782 tokio-runtime-worker(ThreadId(3)) [1P:/Users/builder/builds/BhfSvM9x/0/dev/core/core/ssh/op-ssh-agent/src/lib.rs:377] Error handling sign request: Key(signing with ssh-rsa is unsupported; SHA-1 may be insecure)
ERROR 2022-03-24T15:24:37.798 tokio-runtime-worker(ThreadId(7)) [1P:/Users/builder/builds/BhfSvM9x/0/dev/core/core/ssh/op-ssh-agent/src/lib.rs:377] Error handling sign request: Key(signing with ssh-rsa is unsupported; SHA-1 may be insecure)But when I tried to add these to my config file it got an error:
Host old-host
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsaThat and this seems like the op-ssh-agent does not support the legacy key signing.
0 -
Correct. We currently don't support
ssh-rsa
/ SHA-1 signatures, but because of the compatibility issues this imposes, we're working on adding support for it anyway.0 -
@floris_1P I like the idea of dropping insecure protocols and if at some day unifi updates SSHD I would prefer not to have what I assume is a potential Man in the middle vector (of course I only ssh into these devices on network, so lower risk). Maybe a configuration checkbox for legacy protocols on the developer config menu? If it could be done by key that would be even better so I could enable just for the key I use for Unifi. Just thinking not sure what is possible ;-)
0 -
@compunction You can already opt out of
ssh-rsa
through your SSH config:HostkeyAlgorithms -ssh-rsa PubkeyAcceptedAlgorithms -ssh-rsa
0 -
@floris_1P If I do that in my client config I get:
debug1: Offering public key: removed RSA SHA256:+Q4xSw+GPZrn+v3tMjfTrOqw2Zsiy+ChL/YajpdFmuc agent
debug1: send_pubkey_test: no mutual signature algorithm
debug1: Offering public key: removed RSA SHA256:IIP+sCXT7oTh4Ua8AobOPCNoJklDC55UfmHvtyPYSeM agent
debug1: send_pubkey_test: no mutual signature algorithmIf I reconfigure the SSHD, I would expect it to get broken on the next firmware update.
0 -
@compunction Yes, sorry for the confusion, but all I meant to say that if we now add
ssh-rsa
support to the agent, you would be free to opt out of that using that snippet I posted. But yes, if the server only supportsssh-rsa
, then it is expected that opting out results in a broken auth flow.0