batch handling

tobi88

Aktives Mitglied
Hallo zusammen,

ich habe ein commandozeilenprogramm (easy-rsa) welche ich gerne mit java steuern möchte.

Es sieht wie folgt aus: ich starte die build-key-pass.bat datei. Darauf folgen Benutzereingaben, wie passwort, name usw, die vom benutzer eingetippt werden sollen.

Wie kann ich diese eingaben mit Java automatisieren?

Vielen Dank im voraus 🙂

Gruß
Tobi
 
Besser schaust du, dass derjenige User, unter welchem das Javaprogramm läuft, die Berechtigung hat, dies ohne Passwort auszuführen. So kann man z.B. [c]sudo[/c] unter Linux so konfigurieren, dass bestimmte Befehle eines Users ohne Passwortabfrage ausgeführt werden können (sudo führt einen Befehl mit bestimmten Userrechten aus).
 
du schaust in die build-key-pass.bat und machst den aufruf gegen die exe direkt

Danke für eure Antworten 🙂

Code:
openssl req -days 123 -new -keyout keys\test.key -out keys\test.csr -config openssl.cnf

Wenn ich den Befehl direkt aufrufe, muss ich trotzdem noch Passwort und co eingeben 🙁
Mit openssl /? komme ich nicht weiter. Scheint es auch gar nicht zu geben 😵 Ich steh gerade ziemlich auf dem Schlauch


Code:
openssl:Error: '/?' is an invalid command.

Standard commands
asn1parse      ca             ciphers        crl            crl2pkcs7
dgst           dh             dhparam        dsa            dsaparam
enc            engine         errstr         gendh          gendsa
genrsa         nseq           ocsp           passwd         pkcs12
pkcs7          pkcs8          prime          rand           req
rsa            rsautl         s_client       s_server       s_time
sess_id        smime          speed          spkac          verify
version        x509

Message Digest commands (see the `dgst' command for more details)
md2            md4            md5            mdc2           rmd160
sha            sha1

Cipher commands (see the `enc' command for more details)
aes-128-cbc    aes-128-ecb    aes-192-cbc    aes-192-ecb    aes-256-cbc
aes-256-ecb    base64         bf             bf-cbc         bf-cfb
bf-ecb         bf-ofb         cast           cast-cbc       cast5-cbc
cast5-cfb      cast5-ecb      cast5-ofb      des            des-cbc
des-cfb        des-ecb        des-ede        des-ede-cbc    des-ede-cfb
des-ede-ofb    des-ede3       des-ede3-cbc   des-ede3-cfb   des-ede3-ofb
des-ofb        des3           desx           idea           idea-cbc
idea-cfb       idea-ecb       idea-ofb       rc2            rc2-40-cbc
rc2-64-cbc     rc2-cbc        rc2-cfb        rc2-ecb        rc2-ofb
rc4            rc4-40         rc5            rc5-cbc        rc5-cfb
rc5-ecb        rc5-ofb


Man kann doch bestimmt auch aus dem Java-Programm die Daten schicken. Ist zwar nicht so ein besonders guter Stil, aber gehen müsste es doch?

Gruß
 
Code:
openssl req -days 3650 -new -passout pass:password -subj /countryName=US/stateOrProvinceName=CA/localityName=SanFrancisco/organizationName=SplunkInc/commonName=SplunkCA/organizationName=SplunkUser/ -keyout keys\nutzername.key -out keys\nutzername.csr -config openssl.cnf

Hiermit geht es, was ich möchte.


Aber meine Frage bleibt immernoch offen, ob ich die Daten nicht auch mit Java senden kann bzw wie das geht 🙂

Gruß
Tobi
 
Warum willst du das "mit Java senden"? Ist doch viel einfacher, wenn du das Passwort einfach direkt als Parameter übergeben kannst. Andernfalls musst du die Streams auslesen, die Abfragen prüfen etc. - auf alle Fälle sehr umständlich.
 
Die Zeile muss man nicht in eine Bat (es ist ein Shell/Bash Script 😉 ) packen. Man kann sie auch direkt aus Java aufrufen und jeden beliebigen User und Key mitschicken. Das Script wird ja sowieso von dem Javaprogramm gestartet... Man kann aber natürlich mit Parametern für das Script arbeiten, dass man danach einfach das Script mit [c]foo.sh <user> <pass>[/c] aufrufen kann.
 
Warum willst du das "mit Java senden"? Ist doch viel einfacher, wenn du das Passwort einfach direkt als Parameter übergeben kannst. Andernfalls musst du die Streams auslesen, die Abfragen prüfen etc. - auf alle Fälle sehr umständlich.

Stimmt schon, dass es direkt mit den Parametern einfacher und besser geht. Es geht mir jetzt gerade nur um den Lerneffekt. Ich will ja nicht dumm bleiben 😉 Habe im Netz noch nichts brauchbares gefunden 🙁
 
Du kannst auf den Error- und Outputstream des externen Programmes hören. Sobald da irgendwas wie "Login:" kommt, weisst du dass du im Inputstream den Username (oder das PW) übergeben und den Stream flushen musst.
 
Du kannst auf den Error- und Outputstream des externen Programmes hören. Sobald da irgendwas wie "Login:" kommt, weisst du dass du im Inputstream den Username (oder das PW) übergeben und den Stream flushen musst.

gemacht 🙂

Code:
String s = null;

        try {
            
        	ProcessBuilder builder = new ProcessBuilder("cmd.exe");
        	builder.redirectErrorStream(true);
        	Process p = builder.start();
        	
            
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

            
            writer.write("cd c:\\test\\\n");
            
            writer.write("dir\n");
            
            writer.close();
            
            System.out.println("Normaler Output:");
            while ((s = stdInput.readLine()) != null) {
                System.out.println(s);
            }

            System.out.println("Error Output");
            while ((s = stdError.readLine()) != null) {
                System.out.println(s);
            }
            
            System.exit(0);
        }
        catch (IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }
 

Neue Themen


Zurück
Oben