[SSHD-984] Writing keys in modern OpenSSH format

Add support for writing keys in the modern OpenSSH key format using
the OpenBSD bcrypt KDF for writing passphrase-protected, encrypted
private keys.

Add a new OpenSSHKeyPairResourceWriter using a specialized
OpenSSHKeyEncryptionContext to make the number of KDF rounds
configurable and to have the passphrase as a char[] instead of as a
String. Introduce a new SecureByteArrayOutputStream.

Includes test cases that generate various keys, write them to files,
and load them again. Since this only tests that Apache MINA sshd can
work with these keys, I've also manually verified that command-line
OpenSSH can use keys generated and written by Java to actually connect
to an SSH server.
10 files changed
tree: 458ec8eca7d4dc9de02c462db2d104d1e9a22b79
  1. .github/
  2. assembly/
  3. docs/
  4. sshd-cli/
  5. sshd-common/
  6. sshd-contrib/
  7. sshd-core/
  8. sshd-git/
  9. sshd-ldap/
  10. sshd-mina/
  11. sshd-netty/
  12. sshd-openpgp/
  13. sshd-osgi/
  14. sshd-putty/
  15. sshd-scp/
  16. sshd-sftp/
  17. sshd-sources/
  18. sshd-spring-sftp/
  19. .gitattributes
  20. .gitignore
  21. CHANGES.md
  22. java-checkstyle-license-header.txt
  23. LICENSE.txt
  24. NOTICE-bin.txt
  25. NOTICE.txt
  26. pom.xml
  27. README.md
  28. sshd-checkstyle-suppressions.xml
  29. sshd-checkstyle.xml
  30. sshd-eclipse-formatter-config.xml
  31. sshd-findbugs.xml
  32. sshd-owasp-suppressions.xml
  33. sshd-pmd-ruleset.xml
README.md

Apache MINA SSHD

Apache MINA SSHD

Apache SSHD is a 100% pure java library to support the SSH protocols on both the client and server side. This library can leverage Apache MINA, a scalable and high performance asynchronous IO library. SSHD does not really aim at being a replacement for the SSH client or SSH server from Unix operating systems, but rather provides support for Java based applications requiring SSH support.

Supported standards

Reference implementation documentation

Implemented/available support

Release notes

Core requirements

  • Java 8+ (as of version 1.3)

  • Slf4j

The code only requires the core abstract slf4j-api module. The actual implementation of the logging API can be selected from the many existing adaptors.

Basic artifacts structure

  • sshd-common - contains basic classes used throughout the project as well as code that does not require client or server network support.

  • sshd-core - contains the basic SSH client/server code implementing the connection, transport, channels, forwarding, etc..

    • sshd-mina, sshd-netty - replacements for the default NIO2 connector used to establish and manage network connections using MINA and/or Netty libraries respectively.
  • sshd-sftp - contains the server side SFTP subsystem and the SFTP client code.

  • sshd-scp - contains the server side SCP command handler and the SCP client code.

  • sshd-ldap - contains server-side password and public key authenticators that use and LDAP server.

  • sshd-git - contains replacements for JGit SSH session factory.

  • sshd-osgi - contains an artifact that combines sshd-common and sshd-core so it can be deployed in OSGi environments.

  • sshd-putty - contains code that can parse PUTTY key files.

  • sshd-openpgp - contains code that can parse OpenPGP key files (with some limitations - see relevant section)

  • sshd-cli - contains simple templates for command-line client/server - used to provide look-and-feel similar to the Linux ssh/sshd commands.

  • sshd-contrib - experimental code that is currently under review and may find its way into one of the other artifacts (or become an entirely new artifact - e.g., sshd-putty evolved this way).

Optional dependencies

Quick reference

Set up an SSH client in 5 minutes

Embedding an SSHD server instance in 5 minutes

SSH functionality breakdown

Security providers setup

Commands infrastructure

SCP

SFTP

Port forwarding

Internal support classes

Event listeners and handlers

Command line clients

GIT support

Configuration/data files parsing support

Extension modules