Linux SSH UsernamePasswordInteractive Login with Java ganymed-ssh2

[quote]Ganymed SSH-2 for Java is a library which implements the SSH-2 protocol in pure Java, more details http://www.ganymed.ethz.ch/ssh2/[/quote]

[quote]Here is a full sample for how to do UsernamePasswordInteractive Login and run scp/shell comamnd[/quote]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.KnownHosts;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;


public class SSHUtils
{
public static Connection getSSHConnection() throws IOException {
KnownHosts database = new KnownHosts();
Connection conn = new Connection("TARGET_LINUX_HOSTNAME");

String[] hostkeyAlgos = database.getPreferredServerHostkeyAlgorithmOrder("TARGET_LINUX_HOSTNAME");

if (hostkeyAlgos != null)
{
conn.setServerHostKeyAlgorithms(hostkeyAlgos);
}

conn.connect(new AdvancedVerifier());

if (conn.isAuthMethodAvailable("USERNAME", "keyboard-interactive"))
{
// login for the first time
UsernamePasswordInteractiveCallback il = new UsernamePasswordInteractiveCallback();
boolean loginSuccess = conn.authenticateWithKeyboardInteractive("USERNAME", il);
if (!loginSuccess)
{
System.out.println("login failed");
}

}
return conn;
}

public static List<String> runCommand(final Connection conn,String command) throws IOException {
//handle error stream in real case
Session sess = conn.openSession();
List<String> files = new ArrayList<String>();
sess.execCommand(command);
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
while (true)
{
String line = br.readLine();
if (line == null)
{
break;
}
if (!line.trim().isEmpty())
{
files.add(line.trim());
}
}
sess.close();
return files;
}

public static void copyFile(final Connection conn, String sourcePath, String targetPart) throws IOException {
SCPClient scpClient = conn.createSCPClient();
scpClient.get(sourcePath, targetPart);
}
}


// EOF


public class UsernamePasswordInteractiveCallback implements InteractiveCallback
{

@Override
public String[] replyToChallenge(String arg0, String arg1, int arg2, String[] arg3, boolean[] arg4)
throws Exception
{
final String[] password = new String[1];
password[0] = "Password";
return password;
}

}


class AdvancedVerifier implements ServerHostKeyVerifier
{

public boolean verifyServerHostKey(String hostname, int port, String serverHostKeyAlgorithm,
byte[] serverHostKey) throws Exception
{

return true;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值