在Java

时间:2016-09-12 08:41:54

标签: java ssh sudo ssh-keys

我有一个需要使用ssh在远程主机上执行操作的Web服务器(jetty)。服务器以root身份运行,我希望它保持这种状态。

在webServer计算机上,以root身份运行sudo -su user ssh user@sshServer.com。此命令使用" user"打开sshServer的ssh会话。作为用户。关于这一点的好处是它使用用户的ssh-keys文件启动ssh会话,并且不需要密码。

我想用Java模仿这个操作。我尝试过使用多个ssh库但无法使用它。每当我尝试以其他用户身份连接时,我都需要提供用户密码。换句话说,我可以要求Java以s" user"登录sshServer。但我不能要求Java以#34; user"运行ssh-connection-command。我相信只有在执行ssh-connection-command作为" user"时才会使用密钥文件。

请注意,用户是我登录sshServer的指定用户。 root本身没有ssh密钥文件,并且它不是我可以登录到sshServer的注册用户。我希望避免在代码中或通过其他混淆方法存储用户密码。我也无法创建其密码我可以以任何方式危害的其他用户。

如果有人知道图书馆允许这种或其他方式执行操作,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

基于JSCH证书的身份验证:

JSch jsch = new JSch();

// Here privateKey is a file path like "/home/me/.ssh/secret_rsa "
// passphrase is passed as a string like "mysecr"
jsch.addIdentity(privateKey, passphrase);

session = jsch.getSession(user, host, port);
session.setConfig("StrictHostKeyChecking", "no"); 
// Or yes, up to you. If yes, JSch locks to the server identity so it cannot
// be swapped by another with the same IP.

session.connect();
channel = session.openChannel("shell");
out = channel.getOutputStream();
channel.connect();

HTH,

半乳糖