简体   繁体   English

如何在java中为ssh连接设置密码

[英]how to set password for ssh connection in java

I want to connect my unix server using java code. 我想用java代码连接我的unix服务器。 first it will connect to my server location. 首先它将连接到我的服务器位置。 inside that it'll connect to my server name. 在里面,它将连接到我的服务器名称。 but at that time it'll ask for confirmation (yes/no) and password I don't know how to do? 但那时它会要求确认(是/否)和密码我不知道该怎么做? Here's my code that I have done.please help me out on this 这是我所做的代码。请帮我解决这个问题

public static void main (String args[]) {
    String user = "user";
    String password = "password";
    String host = "hostName";
    int port=22;

    //String remoteFile="/home/john/test.txt";
    //String yes="yes";

    try {
        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
        System.out.println("Establishing Connection...");
        session.connect();
        Channel channel = session.openChannel("exec");

        // After this it'll ask for confirmation and password
        ((ChannelExec)channel).setCommand("ssh myServerName");
        channel.connect();

        InputStream output = channel.getInputStream();

        System.out.println("aafter stream");
        int readByte = output.read();
        StringBuilder outputBuffer = new StringBuilder();
        while (readByte != 0xffffffff) {
            //System.out.println("read byte" + readByte);
            outputBuffer.append((char)readByte);
            readByte = output.read();
        }
        System.out.println(outputBuffer.toString());
        channel.disconnect();
    } catch (Exception e){
        System.err.print("error message" + e);
    }
}

You need to get the OutputStream of JSch secured channel and insert the password in it. 您需要获取JSch安全通道的OutputStream并在其中插入密码。

Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand("sudo -S -p '' " + command);
        channel.setInputStream(null);
        OutputStream out = channel.getOutputStream();
        ((ChannelExec) channel).setErrStream(System.err);
        InputStream in = channel.getInputStream();
        ((ChannelExec) channel).setPty(true);
        channel.connect();
        out.write((password + "\n").getBytes());
        out.flush();

Complete source code here: http://codeflex.co/java-run-sudo-command-on-remote-linux-host/ 这里有完整的源代码: http//codeflex.co/java-run-sudo-command-on-remote-linux-host/

    try {
    session = jsch.getSession(user, host, port);
}
catch (JSchException e) {
    throw new TransferException("Failed to open session - " + params, e);
}

session.setPassword(password);

//  Create UserInfo instance in order to support SFTP connection to any machine 
//  without a key username and password will be given via UserInfo interface.
UserInfo userInfo = new SftpUserInfo();
session.setUserInfo(userInfo);

try {
    session.connect(connectTimeout);
}
catch (JSchException e) {
    throw new TransferException("Failed to connect to session - " + params, e);
}

boolean isSessionConnected = session.isConnected();

Set the password programmatically like seen above. 以编程方式设置密码,如上所示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM