在 Java 中以不同用户身份执行 ssh 连接

Execute an ssh connection as a different user in Java

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

在网络服务器机器上,作为 root,我可以 运行 sudo -su user ssh user@sshServer.com。此命令使用 "user" 作为用户打开到 sshServer 的 ssh 会话。这样做的好处是它使用用户的 ssh-keys 文件启动 ssh 会话并且不需要密码。

我想在Java中模仿这个操作。我试过使用几个 ssh 库,但无法正常工作。每当我尝试以不同用户身份连接时,我都需要提供用户密码。换句话说,我可以要求 Java 作为 "user" 登录到 sshServer 但我不能要求 Java 以 运行 ssh-connection-command 作为 "user".我相信只有在执行 ssh-connection-command 作为 "user".

时才会使用密钥文件

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

如果有人知道允许此操作或其他方式执行该操作的库,我将不胜感激。

基于 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,

加仑