changer le mot de passe du serveur unix distant en utilisant java

Je cherche un moyen de lancer un mot de passe sur un serveur unix distant via un code java. J’utilise Jsch, je peux exécuter avec succès des commandes comme find, zip, get. Mais quand je passe la commande ‘passwd‘, rien ne se passe. Le motif est de créer une application capable de changer le mot de passe du serveur unix tous les 10 jours.

C’est le code que j’essaie d’utiliser (la commande find fonctionne correctement)

JSch sftp=new JSch(); Session session=sftp.getSession("Test", "150.236.9.75"); session.setConfig("SsortingctHostKeyChecking", "no"); session.setConfig("compression.s2c", "[email protected],zlib,none"); session.setConfig("compression.c2s", "[email protected],zlib,none"); session.setConfig("compression_level", "9"); session.setPassword("Test@123"); session.connect(); if(session.isConnected()) { Ssortingng line=""; System.out.println("connected"); ChannelExec ch=(ChannelExec) session.openChannel("exec"); Ssortingng Command="passwd -s; Test@123; Pass@123; Pass@123"; //Ssortingng Command="find *"; InputStream in = ch.getInputStream(); ch.setCommand(Command); ch.connect(); byte[] buffer = new byte[1024]; int bytes; do { while (in.available() > 0) { bytes = in.read(buffer, 0, 1024); Ssortingng file=new Ssortingng(buffer, 0, bytes); System.out.println(file); line=line+file; } } while (!ch.isClosed()); ch.disconnect(); } session.disconnect(); 

La commande passwd nécessite une entrée interactive (c.-à-d. Lue depuis stdin), voir Comment écrire en Java sur stdin de ssh?

Pour moi, exécuter la prochaine commande sans utiliser Thread.sleep fonctionne:

 echo -e \"new-password\nnew-password\" | passwd user-linux