When Oracle upgraded SQL Developer from 19.1 to 19.2 they updated some libraries. One of those updates meant that SSH keypairs that had been generated by PuttyGen didn’t work anymore and you should “Generate OpenSSH format ppk” (see Oracle Support Doc ID: 2575854.1)
However, when attempting to do so using PuttyGen it didn’t seem to work. Taking a step back, here was the situation in 19.1 or earlier:
- You had SQL Developer 19.1 running on your desktop and had used the SSH Hosts dialog to create an SSH connection pointing SQL Developer at the private key on your machine (typically, this is an id_rsa file).
- The server you are connecting to has the associated public key (typically, id_rsa.pub) in the authorized_keys file associated with the account you were connecting to on the remote server.
- Everything worked as expected and you could connect to databases on the remote database server using the SSH connection.
After an upgrade to 19.2 (during which SQL Developer will ask you to import settings from a previous release), there is a chance that the private key that you previously had pointed to will no longer work.
My ‘used to work in 19.1 and earlier’ private key file looked like this:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,abcdefghijklmnopqrstuvwxyz123456 abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 [SNIP] abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 -----END RSA PRIVATE KEY-----
If I opened that file in Putty Key Generator on a Windows 10 box, it said that it was already an OpenSSH SSH-2 Private key.
Since Oracle Support and others said that the key needed to be in OpenSSH format, one would assume that maybe you’d use the Conversion feature of Puttygen to convert the key…
Nope. No go.
After playing around for a long time I discovered the OpenSSH commands that are now built into Windows 10. After testing a million things, this is what actually worked:
C:\sshkeys> ssh-keygen -e -f id_rsa > id_rsa_for_sql_developer_19.2 Enter passphrase:
Once pointed at the id_rsa_for_sql_developer_19.2 file, SQL Developer happily prompted me for my (very long) passphrase and established a connection to my database.
Great! Problem solved.
However, and this is the strange thing that I don’t really understand… If you look at the contents of the generated file, you’ll see something like this:
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "2048-bit RSA, converted by rich@ROTOR from OpenSSH" abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz12 abcdefghijklmnopqrstuv ---- END SSH2 PUBLIC KEY ----
Yep, that is what it looks like, a public key in SSH2 format (although I obviously obfuscated the above, for what reason, I do not know)…
Why an SSH2 Public Key works when you should have a private key (if I understand SSH connections correctly, and this sort of makes me feel like I don’t), I have no idea. But work it did, so I happily moved on.
As an aside, I did have an SR open with Oracle on this which I ended up closing myself, but I did ask them to update Doc ID: 2575854.1 with the above information before I closed it.
Happy SQL Developer-ing!