From: Mathieu Baudier Date: Wed, 25 May 2022 08:30:42 +0000 (+0200) Subject: Adapt SSH support. X-Git-Tag: v2.3.10~218 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=07d7fb980f4ad55213013437bc553b33dca626e4;p=lgpl%2Fargeo-commons.git Adapt SSH support. --- diff --git a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/AbstractSsh.java b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/AbstractSsh.java index cb53f7c1e..2d195de9f 100644 --- a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/AbstractSsh.java +++ b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/AbstractSsh.java @@ -14,9 +14,9 @@ import org.apache.sshd.client.channel.ClientChannel; import org.apache.sshd.client.channel.ClientChannelEvent; import org.apache.sshd.client.future.ConnectFuture; import org.apache.sshd.client.session.ClientSession; -import org.apache.sshd.client.subsystem.sftp.fs.SftpFileSystemProvider; -import org.apache.sshd.common.util.io.NoCloseInputStream; -import org.apache.sshd.common.util.io.NoCloseOutputStream; +import org.apache.sshd.common.util.io.input.NoCloseInputStream; +import org.apache.sshd.common.util.io.output.NoCloseOutputStream; +import org.apache.sshd.sftp.client.fs.SftpFileSystemProvider; import org.argeo.api.cms.CmsLog; @SuppressWarnings("restriction") diff --git a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/BasicSshServer.java b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/BasicSshServer.java index 3e2f9aafb..9e9389342 100644 --- a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/BasicSshServer.java +++ b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/BasicSshServer.java @@ -4,10 +4,10 @@ import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import org.apache.sshd.scp.server.ScpCommandFactory; import org.apache.sshd.server.SshServer; import org.apache.sshd.server.config.keys.DefaultAuthorizedKeysAuthenticator; import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider; -import org.apache.sshd.server.scp.ScpCommandFactory; import org.apache.sshd.server.shell.ProcessShellFactory; import org.argeo.util.OS; diff --git a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/Sftp.java b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/Sftp.java index b27254713..f6f447418 100644 --- a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/Sftp.java +++ b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/Sftp.java @@ -5,7 +5,7 @@ import java.net.URI; import java.nio.file.FileSystem; import java.nio.file.Path; -import org.apache.sshd.client.subsystem.sftp.fs.SftpFileSystem; +import org.apache.sshd.sftp.client.fs.SftpFileSystem; /** Create an SFTP {@link FileSystem}. */ public class Sftp extends AbstractSsh { diff --git a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/SshSync.java b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/SshSync.java index 8c048f76f..71b636576 100644 --- a/org.argeo.cms.ssh/src/org/argeo/cms/ssh/SshSync.java +++ b/org.argeo.cms.ssh/src/org/argeo/cms/ssh/SshSync.java @@ -1,11 +1,13 @@ package org.argeo.cms.ssh; +import java.io.Console; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; +import java.security.KeyPair; import java.util.Map; import java.util.Scanner; @@ -15,10 +17,13 @@ import org.apache.sshd.agent.SshAgentFactory; import org.apache.sshd.agent.local.LocalAgentFactory; import org.apache.sshd.agent.unix.UnixAgentFactory; import org.apache.sshd.client.SshClient; +import org.apache.sshd.client.config.keys.ClientIdentityLoader; import org.apache.sshd.client.future.ConnectFuture; import org.apache.sshd.client.session.ClientSession; -import org.apache.sshd.client.subsystem.sftp.fs.SftpFileSystem; -import org.apache.sshd.client.subsystem.sftp.fs.SftpFileSystemProvider; +import org.apache.sshd.common.NamedResource; +import org.apache.sshd.common.config.keys.FilePasswordProvider; +import org.apache.sshd.sftp.client.fs.SftpFileSystem; +import org.apache.sshd.sftp.client.fs.SftpFileSystemProvider; import org.argeo.api.cms.CmsLog; public class SshSync { @@ -28,11 +33,11 @@ public class SshSync { try (SshClient client = SshClient.setUpDefaultClient()) { client.start(); - boolean osAgent = true; + boolean osAgent = false; SshAgentFactory agentFactory = osAgent ? new UnixAgentFactory() : new LocalAgentFactory(); // SshAgentFactory agentFactory = new LocalAgentFactory(); client.setAgentFactory(agentFactory); - SshAgent sshAgent = agentFactory.createClient(client); + SshAgent sshAgent = agentFactory.createClient(null, client); String login = System.getProperty("user.name"); String host = "localhost"; @@ -40,12 +45,27 @@ public class SshSync { if (!osAgent) { String keyPath = "/home/" + login + "/.ssh/id_rsa"; - System.out.print(keyPath + ": "); - Scanner s = new Scanner(System.in); - String password = s.next(); -// KeyPair keyPair = ClientIdentityLoader.DEFAULT.loadClientIdentity(keyPath, -// FilePasswordProvider.of(password)); -// sshAgent.addIdentity(keyPair, "NO COMMENT"); + + String password; + Console console = System.console(); + if (console != null) { + password = new String(console.readPassword(keyPath + ": ")); + } else { + System.out.print(keyPath + ": "); + try (Scanner s = new Scanner(System.in)) { + password = s.next(); + } + } + NamedResource namedResource = new NamedResource() { + + @Override + public String getName() { + return keyPath; + } + }; + KeyPair keyPair = ClientIdentityLoader.DEFAULT + .loadClientIdentities(null, namedResource, FilePasswordProvider.of(password)).iterator().next(); + sshAgent.addIdentity(keyPair, "NO COMMENT"); } // List> identities = sshAgent.getIdentities();