read a private key directly from environment variable 'privatekey'
This commit is contained in:
parent
f39c974e74
commit
1d256a70d1
4 changed files with 40 additions and 5 deletions
|
@ -85,6 +85,7 @@ import org.apache.sshd.common.auth.MutableBasicCredentials;
|
||||||
import org.apache.sshd.common.io.IoSession;
|
import org.apache.sshd.common.io.IoSession;
|
||||||
import org.apache.sshd.common.keyprovider.ClassLoadableResourceKeyPairProvider;
|
import org.apache.sshd.common.keyprovider.ClassLoadableResourceKeyPairProvider;
|
||||||
import org.apache.sshd.common.keyprovider.KeyIdentityProvider;
|
import org.apache.sshd.common.keyprovider.KeyIdentityProvider;
|
||||||
|
import org.apache.sshd.common.keyprovider.SimpleKeyPairProvider;
|
||||||
import org.apache.sshd.common.util.GenericUtils;
|
import org.apache.sshd.common.util.GenericUtils;
|
||||||
import org.apache.sshd.common.util.NumberUtils;
|
import org.apache.sshd.common.util.NumberUtils;
|
||||||
import org.apache.sshd.common.util.ValidateUtils;
|
import org.apache.sshd.common.util.ValidateUtils;
|
||||||
|
@ -204,6 +205,9 @@ public class SftpFileSystemProvider extends FileSystemProvider {
|
||||||
String username = o instanceof String ? (String) o : o != null ? o.toString() : null;
|
String username = o instanceof String ? (String) o : o != null ? o.toString() : null;
|
||||||
o = env.get("password");
|
o = env.get("password");
|
||||||
char[] password = o instanceof char[] ? (char[]) o : o instanceof String ? ((String)o).toCharArray() : null;
|
char[] password = o instanceof char[] ? (char[]) o : o instanceof String ? ((String)o).toCharArray() : null;
|
||||||
|
if (env.containsKey("privatekey")) {
|
||||||
|
clientInstance.setKeyIdentityProvider(new SimpleKeyPairProvider(env.get("privatekey").toString()));
|
||||||
|
}
|
||||||
if (env.containsKey("key")) {
|
if (env.containsKey("key")) {
|
||||||
clientInstance.setKeyIdentityProvider(new ClassLoadableResourceKeyPairProvider(env.get("key").toString()));
|
clientInstance.setKeyIdentityProvider(new ClassLoadableResourceKeyPairProvider(env.get("key").toString()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,6 @@ package org.apache.sshd.fs.test;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import org.apache.sshd.client.ClientBuilder;
|
import org.apache.sshd.client.ClientBuilder;
|
||||||
import org.apache.sshd.client.SshClient;
|
import org.apache.sshd.client.SshClient;
|
||||||
import org.apache.sshd.client.config.hosts.HostConfigEntry;
|
|
||||||
import org.apache.sshd.client.session.ClientSession;
|
|
||||||
import org.apache.sshd.fs.SftpFileSystem;
|
import org.apache.sshd.fs.SftpFileSystem;
|
||||||
import org.apache.sshd.fs.SftpFileSystemProvider;
|
import org.apache.sshd.fs.SftpFileSystemProvider;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -27,9 +25,9 @@ public class SFTPFileSystemTest {
|
||||||
env.put("username", "joerg");
|
env.put("username", "joerg");
|
||||||
URI uri = URI.create("sftp://xbib.org");
|
URI uri = URI.create("sftp://xbib.org");
|
||||||
SshClient sshClient = ClientBuilder.builder().build();
|
SshClient sshClient = ClientBuilder.builder().build();
|
||||||
Path privateKey = Paths.get(System.getProperty("user.home") + "/.ssh/id_ed25519");
|
Path privateKeyPath = Paths.get(System.getProperty("user.home") + "/.ssh/id_ed25519");
|
||||||
PrivateKeyReader privateKeyReader = new PrivateKeyReader();
|
PrivateKeyReader privateKeyReader = new PrivateKeyReader();
|
||||||
KeyPair keyPair = privateKeyReader.generateFrom(Files.newInputStream(privateKey), null);
|
KeyPair keyPair = privateKeyReader.generateFrom(Files.newInputStream(privateKeyPath), null);
|
||||||
sshClient.addPublicKeyIdentity(keyPair);
|
sshClient.addPublicKeyIdentity(keyPair);
|
||||||
sshClient.setNioWorkers(1);
|
sshClient.setNioWorkers(1);
|
||||||
sshClient.start();
|
sshClient.start();
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.apache.sshd.common.keyprovider;
|
||||||
|
|
||||||
|
import org.apache.sshd.common.config.keys.loader.KeyPairResourceParser;
|
||||||
|
import org.apache.sshd.common.session.SessionContext;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.security.KeyPair;
|
||||||
|
import java.security.NoSuchProviderException;
|
||||||
|
|
||||||
|
import static org.apache.sshd.common.util.security.SecurityUtils.getKeyPairResourceParser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a key directly from a given string which represents the private key.
|
||||||
|
*/
|
||||||
|
public class SimpleKeyPairProvider extends AbstractKeyPairProvider {
|
||||||
|
|
||||||
|
// the private key
|
||||||
|
private final String data;
|
||||||
|
|
||||||
|
public SimpleKeyPairProvider(String data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<KeyPair> loadKeys(SessionContext session) throws IOException, GeneralSecurityException {
|
||||||
|
KeyPairResourceParser parser = getKeyPairResourceParser();
|
||||||
|
if (parser == null) {
|
||||||
|
throw new NoSuchProviderException("No registered key-pair resource parser");
|
||||||
|
}
|
||||||
|
return parser.loadKeyPairs(session, null, null, data);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,3 @@
|
||||||
group = org.xbib
|
group = org.xbib
|
||||||
name = files
|
name = files
|
||||||
version = 4.5.0
|
version = 4.6.0
|
||||||
|
|
Loading…
Reference in a new issue