--- /dev/null
+[
+{
+ "name":"java.security.KeyFactory",
+ "methods":[{"name":"getInstance","parameterTypes":["java.lang.String","java.lang.String"] }]
+},
+{
+ "name":"java.security.KeyPairGenerator",
+ "methods":[{"name":"getInstance","parameterTypes":["java.lang.String","java.lang.String"] }]
+},
+{
+ "name":"java.security.MessageDigest",
+ "methods":[{"name":"getInstance","parameterTypes":["java.lang.String","java.lang.String"] }]
+},
+{
+ "name":"java.security.SecureRandomParameters"
+},
+{
+ "name":"java.security.Signature",
+ "methods":[{"name":"getInstance","parameterTypes":["java.lang.String","java.lang.String"] }]
+},
+{
+ "name":"java.security.cert.PKIXRevocationChecker"
+},
+{
+ "name":"javax.crypto.KeyAgreement",
+ "methods":[{"name":"getInstance","parameterTypes":["java.lang.String","java.lang.String"] }]
+},
+{
+ "name":"org.apache.sshd.common.SshConstants",
+ "allPublicFields":true
+},
+{
+ "name":"org.apache.sshd.common.io.nio2.Nio2ServiceFactoryFactory",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.sshd.common.session.SessionListener",
+ "methods":[
+ {"name":"sessionClosed","parameterTypes":["org.apache.sshd.common.session.Session"] },
+ {"name":"sessionCreated","parameterTypes":["org.apache.sshd.common.session.Session"] },
+ {"name":"sessionEstablished","parameterTypes":["org.apache.sshd.common.session.Session"] },
+ {"name":"sessionEvent","parameterTypes":["org.apache.sshd.common.session.Session","org.apache.sshd.common.session.SessionListener$Event"] },
+ {"name":"sessionNegotiationEnd","parameterTypes":["org.apache.sshd.common.session.Session","java.util.Map","java.util.Map","java.util.Map","java.lang.Throwable"] },
+ {"name":"sessionNegotiationOptionsCreated","parameterTypes":["org.apache.sshd.common.session.Session","java.util.Map"] },
+ {"name":"sessionNegotiationStart","parameterTypes":["org.apache.sshd.common.session.Session","java.util.Map","java.util.Map"] },
+ {"name":"sessionPeerIdentificationLine","parameterTypes":["org.apache.sshd.common.session.Session","java.lang.String","java.util.List"] },
+ {"name":"sessionPeerIdentificationReceived","parameterTypes":["org.apache.sshd.common.session.Session","java.lang.String","java.util.List"] },
+ {"name":"sessionPeerIdentificationSend","parameterTypes":["org.apache.sshd.common.session.Session","java.lang.String","java.util.List"] }
+ ]
+},
+{
+ "name":"org.apache.sshd.common.util.security.bouncycastle.BouncyCastleSecurityProviderRegistrar",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.apache.sshd.common.util.security.eddsa.EdDSASecurityProviderRegistrar",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.COMPOSITE$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.DH$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.DSA$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.DSTU4145$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.EC$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.ECGOST$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.EXTERNAL$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.EdEC$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.ElGamal$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.GM$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.GOST$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.IES$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.LMS$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.RSA$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.SPHINCSPlus$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.X509$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.dh.KeyPairGeneratorSpi",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi$EC",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.ec.KeyPairGeneratorSpi$EC",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.ec.SignatureSpi$ecDSA256",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.edec.KeyAgreementSpi$X25519",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.edec.KeyAgreementSpi$X448",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.edec.KeyFactorySpi$X25519",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.edec.KeyFactorySpi$X448",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X25519",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.edec.KeyPairGeneratorSpi$X448",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi$SHA512",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Blake2b$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Blake2s$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Blake3$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.DSTU7564$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.GOST3411$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Haraka$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Keccak$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.MD2$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.MD4$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.MD5$Digest",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.MD5$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.RIPEMD128$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.RIPEMD160$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.RIPEMD256$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.RIPEMD320$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA1$Digest",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA1$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA224$Digest",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA224$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA256$Digest",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA256$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA3$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA384$Digest",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA384$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA512$Digest",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SHA512$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.SM3$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Skein$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Tiger$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.digest.Whirlpool$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.drbg.DRBG$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.keystore.BC$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.keystore.BCFKS$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.keystore.PKCS12$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.AES$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.ARC4$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.ARIA$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Blowfish$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.CAST5$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.CAST6$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Camellia$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.ChaCha$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.DES$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.DESede$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.DSTU7624$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.GOST28147$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.GOST3412_2015$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Grain128$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Grainv1$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.HC128$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.HC256$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.IDEA$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Noekeon$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.OpenSSLPBKDF$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF1$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Poly1305$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.RC2$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.RC5$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.RC6$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Rijndael$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.SCRYPT$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.SEED$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.SM4$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Salsa20$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Serpent$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Shacal2$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.SipHash$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.SipHash128$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Skipjack$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.TEA$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.TLSKDF$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Threefish$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Twofish$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.VMPC$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.VMPCKSA3$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.XSalsa20$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.XTEA$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jcajce.provider.symmetric.Zuc$Mappings",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"org.bouncycastle.jce.provider.BouncyCastleProvider",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.NativePRNG",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA",
+ "methods":[{"name":"<init>","parameterTypes":[] }]
+}
+]
import java.util.List;
import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.MissingArgumentException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.sshd.agent.SshAgent;
import org.apache.sshd.client.config.keys.ClientIdentityLoader;
import org.apache.sshd.common.NamedResource;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
+import org.argeo.api.cli.CommandArgsException;
import org.argeo.api.cli.DescribedCommand;
import org.argeo.cms.ssh.AbstractSsh;
import org.argeo.cms.ssh.Ssh;
public class SshShell implements DescribedCommand<String> {
- private Option portOption;
-
- @Override
- public Options getOptions() {
- Options options = new Options();
- portOption = Option.builder().option("p").longOpt("port").hasArg().desc("port to connect to").build();
- options.addOption(portOption);
- return options;
- }
-
- @Override
- public String apply(List<String> args) {
- CommandLine cl = toCommandLine(args);
- String portStr = cl.getOptionValue(portOption);
- if (portStr == null)
- portStr = "22";
-
- String host = cl.getArgList().get(0);
-
- String uriStr = "ssh://" + host + ":" + portStr + "/";
- // System.out.println(uriStr);
- URI uri = URI.create(uriStr);
-
- Ssh ssh = null;
+ private Option portOption;
+
+ @Override
+ public Options getOptions() {
+ Options options = new Options();
+ portOption = Option.builder().option("p").longOpt("port").hasArg().desc("port to connect to").build();
+ options.addOption(portOption);
+ return options;
+ }
+
+ @Override
+ public String apply(List<String> args) {
+ CommandLine cl = toCommandLine(args);
+ String portStr = cl.getOptionValue(portOption);
+ if (portStr == null)
+ portStr = "22";
+
+ if (cl.getArgList().size() == 0)
+ throw new CommandArgsException("Host must be provided");
+ String host = cl.getArgList().get(0);
+
+ String uriStr = "ssh://" + host + ":" + portStr + "/";
+ // System.out.println(uriStr);
+ URI uri = URI.create(uriStr);
+
+ Ssh ssh = null;
+ try {
+ ssh = new Ssh(uri);
+ boolean osAgent;
+ SshAgent sshAgent;
try {
- ssh = new Ssh(uri);
- boolean osAgent;
- SshAgent sshAgent;
- try {
- String sshAuthSockentEnv = System.getenv(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
- if (sshAuthSockentEnv != null) {
- ssh.getSshClient().getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, sshAuthSockentEnv);
- SshAgentFactory agentFactory = new UnixAgentFactory();
- ssh.getSshClient().setAgentFactory(agentFactory);
- sshAgent = agentFactory.createClient(null, ssh.getSshClient());
- osAgent = true;
- } else {
- osAgent = false;
- }
- } catch (Exception e) {
- e.printStackTrace();
- osAgent = false;
- }
-
- if (!osAgent) {
- SshAgentFactory agentFactory = new LocalAgentFactory();
+ String sshAuthSockentEnv = System.getenv(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
+ if (sshAuthSockentEnv != null) {
+ ssh.getSshClient().getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, sshAuthSockentEnv);
+ SshAgentFactory agentFactory = new UnixAgentFactory();
ssh.getSshClient().setAgentFactory(agentFactory);
sshAgent = agentFactory.createClient(null, ssh.getSshClient());
- String keyPath = System.getProperty("user.home") + "/.ssh/id_rsa";
-
- char[] keyPassword = AbstractSsh.readPassword();
- NamedResource namedResource = new NamedResource() {
-
- @Override
- public String getName() {
- return keyPath;
- }
- };
- KeyPair keyPair = ClientIdentityLoader.DEFAULT
- .loadClientIdentities(null, namedResource, FilePasswordProvider.of(new String(keyPassword)))
- .iterator().next();
- sshAgent.addIdentity(keyPair, "NO COMMENT");
+ osAgent = true;
+ } else {
+ osAgent = false;
}
+ } catch (Exception e) {
+ e.printStackTrace();
+ osAgent = false;
+ }
+
+ if (!osAgent) {
+ SshAgentFactory agentFactory = new LocalAgentFactory();
+ ssh.getSshClient().setAgentFactory(agentFactory);
+ sshAgent = agentFactory.createClient(null, ssh.getSshClient());
+ String keyPath = System.getProperty("user.home") + "/.ssh/id_rsa";
+
+ char[] keyPassword = AbstractSsh.readPassword();
+ NamedResource namedResource = new NamedResource() {
+
+ @Override
+ public String getName() {
+ return keyPath;
+ }
+ };
+ KeyPair keyPair = ClientIdentityLoader.DEFAULT
+ .loadClientIdentities(null, namedResource, FilePasswordProvider.of(new String(keyPassword)))
+ .iterator().next();
+ sshAgent.addIdentity(keyPair, "NO COMMENT");
+ }
// char[] keyPassword = AbstractSsh.readPassword();
// SshKeyPair keyPair = SshKeyPair.loadDefault(keyPassword);
// Arrays.fill(keyPassword, '*');
// ssh.setSshKeyPair(keyPair);
// ssh.authenticate();
- ssh.verifyAuth();
-
- long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
- System.out.println("Ssh available in " + jvmUptime + " ms.");
-
- AbstractSsh.openShell(ssh);
- } catch (IOException | GeneralSecurityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- if (ssh != null)
- ssh.closeSession();
- }
- return null;
+ ssh.verifyAuth();
+
+ long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
+ System.out.println("Ssh available in " + jvmUptime + " ms.");
+
+ AbstractSsh.openShell(ssh);
+ } catch (IOException | GeneralSecurityException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ if (ssh != null)
+ ssh.closeSession();
}
+ return null;
+ }
- @Override
- public String getDescription() {
- return "Launch a static CMS.";
- }
+ @Override
+ public String getUsage() {
+ return "<hostname>";
+ }
+
+ @Override
+ public String getDescription() {
+ return "Opens a remote shell";
+ }
- }
\ No newline at end of file
+}
\ No newline at end of file