Dostęp po SSH w javie

Dostęp po SSH w javie

Z tego artykułu dowiesz się w jaki sposób uzyskać dostęp do swojego serwera po SSH (z ang. Secure Shell) z poziomu aplikacji napisanej w javie. SSH to protokół warstwy aplikacji pozwalający zdalnie zarządzać hostami. Potrzebujemy zależności do biblioteki jsh:

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.51</version>
</dependency>

Klasa testowa:

public class Start {
 
    public static void main(String[] args) throws IOException, JSchException {
 
        String host="";
        String user="";
        String password="";
        String command="";
        try{
 
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            JSch jsch = new JSch();
            Session session=jsch.getSession(user, host, 22);
            session.setPassword(password);
            session.setConfig(config);
            session.connect();
            System.out.println("Connected");
 
            Channel channel=session.openChannel("exec");
            ((ChannelExec)channel).setCommand(command);
            channel.setInputStream(null);
            ((ChannelExec)channel).setErrStream(System.err);
 
            InputStream in=channel.getInputStream();
            channel.connect();
            byte[] tmp=new byte[1024];
            while(true){
                while(in.available()>0){
                    int i=in.read(tmp, 0, 1024);
                    if(i<0)break;
                    System.out.print(new String(tmp, 0, i));
                }
                if(channel.isClosed()){
                    System.out.println("exit-status: "+channel.getExitStatus());
                    break;
                }
                try{Thread.sleep(1000);}catch(Exception ee){}
            }
            channel.disconnect();
            session.disconnect();
            System.out.println("DONE");
        }catch(Exception e){
            e.printStackTrace();
        }
 
    }
}

Klasa ta łączy się po SSH do naszego serwera i wykonuje polecenie zdefiniowane w zmiennej command. W efekcie otrzymamy wynik wykonanego na serwerze polecenia.

Leave a comment

Your email address will not be published.


*