JSch addIdentity

137
13 января 2019, 10:10

Скажите пожалуйста, как сгенерировать файл под jsch, я пробовал с помощью PuttyGen, но addIdentity вылетает с exception с сообщением, что файл-ключ "не правильный"?

String sshKeyFile = "ssh-key.pem";
JSch jsch = new JSch();
jsch.addIdentity(sshKeyFile);
Answer 1

Есть пример подключения по SSH с логином/паролем:

Пример кода Java, позволяющий выполнить любую команду на удаленном компьютере по протоколу SSH из программы Java:

package cabbott.net;
import com.jcraft.jsch.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SSHManager {
    private static final Logger LOGGER =
            Logger.getLogger(SSHManager.class.getName());
    private JSch jschSSHChannel;
    private String strUserName;
    private String strConnectionIP;
    private int intConnectionPort;
    private String strPassword;
    private Session sesConnection;
    private int intTimeOut;
    private void doCommonConstructorActions(String userName,
                                            String password, String connectionIP, String knownHostsFileName) {
        jschSSHChannel = new JSch();
        try {
            jschSSHChannel.setKnownHosts(knownHostsFileName);
        } catch (JSchException jschX) {
            logError(jschX.getMessage());
        }
        strUserName = userName;
        strPassword = password;
        strConnectionIP = connectionIP;
    }
    public SSHManager(String userName, String password,
                      String connectionIP, String knownHostsFileName) {
        doCommonConstructorActions(userName, password,
                connectionIP, knownHostsFileName);
        intConnectionPort = 22;
        intTimeOut = 60000;
    }
    public SSHManager(String userName, String password, String connectionIP,
                      String knownHostsFileName, int connectionPort) {
        doCommonConstructorActions(userName, password, connectionIP,
                knownHostsFileName);
        intConnectionPort = connectionPort;
        intTimeOut = 60000;
    }
    public SSHManager(String userName, String password, String connectionIP,
                      String knownHostsFileName, int connectionPort, int timeOutMilliseconds) {
        doCommonConstructorActions(userName, password, connectionIP,
                knownHostsFileName);
        intConnectionPort = connectionPort;
        intTimeOut = timeOutMilliseconds;
    }
    public String connect() {
        String errorMessage = null;
        try {
            sesConnection = jschSSHChannel.getSession(strUserName,
                    strConnectionIP, intConnectionPort);
            sesConnection.setPassword(strPassword);
            // UNCOMMENT THIS FOR TESTING PURPOSES, BUT DO NOT USE IN PRODUCTION
            // sesConnection.setConfig("StrictHostKeyChecking", "no");
            sesConnection.connect(intTimeOut);
        } catch (JSchException jschX) {
            errorMessage = jschX.getMessage();
        }
        return errorMessage;
    }
    private String logError(String errorMessage) {
        if (errorMessage != null) {
            LOGGER.log(Level.SEVERE, "{0}:{1} - {2}",
                    new Object[]{strConnectionIP, intConnectionPort, errorMessage});
        }
        return errorMessage;
    }
    private String logWarning(String warnMessage) {
        if (warnMessage != null) {
            LOGGER.log(Level.WARNING, "{0}:{1} - {2}",
                    new Object[]{strConnectionIP, intConnectionPort, warnMessage});
        }
        return warnMessage;
    }
    public String sendCommand(String command) {
        StringBuilder outputBuffer = new StringBuilder();
        try {
            Channel channel = sesConnection.openChannel("exec");
            ((ChannelExec) channel).setCommand(command);
            InputStream commandOutput = channel.getInputStream();
            channel.connect();
            int readByte = commandOutput.read();
            while (readByte != 0xffffffff) {
                outputBuffer.append((char) readByte);
                readByte = commandOutput.read();
            }
            channel.disconnect();
        } catch (IOException ioX) {
            logWarning(ioX.getMessage());
            return null;
        } catch (JSchException jschX) {
            logWarning(jschX.getMessage());
            return null;
        }
        return outputBuffer.toString();
    }
    public void close() {
        sesConnection.disconnect();
    }
}

Для запуска:

@Test
public void testSendCommand() {
    System.out.println("sendCommand");
    /**
     * YOU MUST CHANGE THE FOLLOWING
     * FILE_NAME: A FILE IN THE DIRECTORY
     * USER: LOGIN USER NAME
     * PASSWORD: PASSWORD FOR THAT USER
     * HOST: IP ADDRESS OF THE SSH SERVER
     **/
    String command = "ls FILE_NAME";
    String userName = "USER";
    String password = "PASSWORD";
    String connectionIP = "HOST";
    SSHManager instance = new SSHManager(userName, password, connectionIP, "");
    String errorMessage = instance.connect();
    if (errorMessage != null) {
        System.out.println(errorMessage);
        fail();
    }
    String expResult = "FILE_NAME\n";
    // call sendCommand for each command and the output 
    //(without prompts) is returned
    String result = instance.sendCommand(command);
    // close only after all commands are sent
    instance.close();
    assertEquals(expResult, result);
}

Оригинал: Run a command over SSH with JSch | Stack Overflow

READ ALSO
Как работает такая проверка на четность/нечетность?

Как работает такая проверка на четность/нечетность?

Встретил пример, проверка числа i на нечетность и никак не могу понять как работает данная проверкаКонкретно не понятен блок (i&1)

170
Android. Фрагменты накладываются друг на друга

Android. Фрагменты накладываются друг на друга

Конечно же, я почитал темы здесь и в гуглеИ не нашёл решения

140
Имена полей Pojo объекта

Имена полей Pojo объекта

Почему objectMapper не видит сеттеров полей Pojo объекта?

121
java Как правильно спрятать JPanel

java Как правильно спрятать JPanel

Хочу по нажатию Кнопки спрятать одну панель, что позволит увидеть другую У меня такой код

151