SSH GraalVM configs
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 13 Jul 2022 07:23:22 +0000 (09:23 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 13 Jul 2022 07:23:22 +0000 (09:23 +0200)
org.argeo.cms.cli/src/org/argeo/cms/cli/ArgeoCli.java
org.argeo.cms.lib.sshd/META-INF/native-image/jni-config.json [new file with mode: 0644]
org.argeo.cms.lib.sshd/META-INF/native-image/predefined-classes-config.json [new file with mode: 0644]
org.argeo.cms.lib.sshd/META-INF/native-image/proxy-config.json [new file with mode: 0644]
org.argeo.cms.lib.sshd/META-INF/native-image/reflect-config.json [new file with mode: 0644]
org.argeo.cms.lib.sshd/META-INF/native-image/resource-config.json [new file with mode: 0644]
org.argeo.cms.lib.sshd/META-INF/native-image/serialization-config.json [new file with mode: 0644]
org.argeo.cms.lib.sshd/build.properties
org.argeo.cms.lib.sshd/src/org/argeo/cms/ssh/cli/SshCli.java
org.argeo.cms.lib.sshd/src/org/argeo/cms/ssh/cli/SshShell.java

index 8c7bedda97ce7b2c0972a9006eb8b8395fc2d541..1dd57f3df9083ecba86824789d5418c1b6f99b66 100644 (file)
@@ -25,8 +25,4 @@ public class ArgeoCli extends CommandsCli {
                return "Argeo utilities";
        }
 
-       public static void main(String[] args) {
-               mainImpl(new ArgeoCli("argeo"), args);
-       }
-
 }
diff --git a/org.argeo.cms.lib.sshd/META-INF/native-image/jni-config.json b/org.argeo.cms.lib.sshd/META-INF/native-image/jni-config.json
new file mode 100644 (file)
index 0000000..7d14cdb
--- /dev/null
@@ -0,0 +1,75 @@
+[
+{
+  "name":"java.lang.Boolean",
+  "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
+},
+{
+  "name":"java.lang.ClassLoader",
+  "methods":[
+    {"name":"getPlatformClassLoader","parameterTypes":[] }, 
+    {"name":"loadClass","parameterTypes":["java.lang.String"] }
+  ]
+},
+{
+  "name":"java.lang.String",
+  "methods":[
+    {"name":"<init>","parameterTypes":["byte[]"] }, 
+    {"name":"getBytes","parameterTypes":[] }
+  ]
+},
+{
+  "name":"jdk.internal.loader.ClassLoaders$PlatformClassLoader"
+},
+{
+  "name":"org.apache.tomcat.jni.FileInfo",
+  "fields":[
+    {"name":"atime"}, 
+    {"name":"csize"}, 
+    {"name":"ctime"}, 
+    {"name":"device"}, 
+    {"name":"filehand"}, 
+    {"name":"filetype"}, 
+    {"name":"fname"}, 
+    {"name":"group"}, 
+    {"name":"inode"}, 
+    {"name":"mtime"}, 
+    {"name":"name"}, 
+    {"name":"nlink"}, 
+    {"name":"pool"}, 
+    {"name":"protection"}, 
+    {"name":"size"}, 
+    {"name":"user"}, 
+    {"name":"valid"}
+  ],
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.apache.tomcat.jni.Sockaddr",
+  "fields":[
+    {"name":"family"}, 
+    {"name":"hostname"}, 
+    {"name":"next"}, 
+    {"name":"pool"}, 
+    {"name":"port"}, 
+    {"name":"servname"}
+  ],
+  "methods":[{"name":"<init>","parameterTypes":[] }]
+},
+{
+  "name":"org.graalvm.jniutils.JNIExceptionWrapperEntryPoints",
+  "methods":[{"name":"getClassName","parameterTypes":["java.lang.Class"] }]
+},
+{
+  "name":"sun.management.VMManagementImpl",
+  "fields":[
+    {"name":"compTimeMonitoringSupport"}, 
+    {"name":"currentThreadCpuTimeSupport"}, 
+    {"name":"objectMonitorUsageSupport"}, 
+    {"name":"otherThreadCpuTimeSupport"}, 
+    {"name":"remoteDiagnosticCommandsSupport"}, 
+    {"name":"synchronizerUsageSupport"}, 
+    {"name":"threadAllocatedMemorySupport"}, 
+    {"name":"threadContentionMonitoringSupport"}
+  ]
+}
+]
diff --git a/org.argeo.cms.lib.sshd/META-INF/native-image/predefined-classes-config.json b/org.argeo.cms.lib.sshd/META-INF/native-image/predefined-classes-config.json
new file mode 100644 (file)
index 0000000..0e79b2c
--- /dev/null
@@ -0,0 +1,8 @@
+[
+  {
+    "type":"agent-extracted",
+    "classes":[
+    ]
+  }
+]
+
diff --git a/org.argeo.cms.lib.sshd/META-INF/native-image/proxy-config.json b/org.argeo.cms.lib.sshd/META-INF/native-image/proxy-config.json
new file mode 100644 (file)
index 0000000..f9dde34
--- /dev/null
@@ -0,0 +1,11 @@
+[
+  {
+    "interfaces":["org.apache.sshd.common.channel.ChannelListener"]}
+  ,
+  {
+    "interfaces":["org.apache.sshd.common.forward.PortForwardingEventListener"]}
+  ,
+  {
+    "interfaces":["org.apache.sshd.common.session.SessionListener"]}
+  
+]
diff --git a/org.argeo.cms.lib.sshd/META-INF/native-image/reflect-config.json b/org.argeo.cms.lib.sshd/META-INF/native-image/reflect-config.json
new file mode 100644 (file)
index 0000000..e68e2b5
--- /dev/null
@@ -0,0 +1,503 @@
+[
+{
+  "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":[] }]
+}
+]
diff --git a/org.argeo.cms.lib.sshd/META-INF/native-image/resource-config.json b/org.argeo.cms.lib.sshd/META-INF/native-image/resource-config.json
new file mode 100644 (file)
index 0000000..7c33b1b
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "resources":{
+  "includes":[
+    {
+      "pattern":"\\Qorg/apache/sshd/sshd-version.properties\\E"
+    }, 
+    {
+      "pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"
+    }
+  ]},
+  "bundles":[]
+}
diff --git a/org.argeo.cms.lib.sshd/META-INF/native-image/serialization-config.json b/org.argeo.cms.lib.sshd/META-INF/native-image/serialization-config.json
new file mode 100644 (file)
index 0000000..bf554e0
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "types":[
+  ],
+  "lambdaCapturingTypes":[
+  ]
+}
index fb57a1cb547ad35b337382019722bd9e75038dd4..a04ec77ec766529f7716f85f46a9a6780f250f08 100644 (file)
@@ -4,4 +4,6 @@ bin.includes = META-INF/,\
                OSGI-INF/
 source.. = src/
 additional.bundles = org.slf4j.api,\
-                     org.argeo.ext.slf4j
+                     org.argeo.ext.slf4j,\
+                     org.apache.tomcat.jni
+                     
\ No newline at end of file
index 12b4d5e1d141a9d70cd65b30188f4c43a6482218..4ec456b34d46054ad898728a84b0d21180a2adb4 100644 (file)
@@ -13,5 +13,8 @@ public class SshCli extends CommandsCli {
                return "SSH utilities.";
        }
 
-        
+       public static void main(String[] args) {
+               mainImpl(new SshCli("ssh"), args);
+       }
+
 }
index 78903a7791cf0da44b5ecf7672a17c2b7c4cf94f..a7283b3ad1d464b2e33745097c0668834f2ddc22 100644 (file)
@@ -8,6 +8,7 @@ import java.security.KeyPair;
 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;
@@ -17,99 +18,107 @@ import org.apache.sshd.agent.unix.UnixAgentFactory;
 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