java - 使用 sshj java 库在我的 Amazon EC2 机器上执行 "sudo"命令

标签 java sshj

我尝试使用 SSHJ 库 ( https://github.com/shikhar/sshj ) 在我的 Amazon EC2 计算机上执行 sudo 命令。不幸的是,我没有收到服务器的任何响应。我确信其他非 sudo 命令可以完美执行。这是一些示例代码。

        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        sshClient.addHostKeyVerifier(new PromiscuousVerifier());
        sshClient.connect(host, 22);

        if (privateKeyFile != null) {
            // authenticate using private key file.
            PKCS8KeyFile keyFile = new PKCS8KeyFile();
            keyFile.init(privateKeyFile);
            sshClient.authPublickey(user, keyFile);
        } else {
            // Authenticate using password.
            sshClient.authPassword(user, password);
        }

        // Start a new session
        session = sshClient.startSession();
        session.allocatePTY("vt220", 80,24,0,0,Collections.<PTYMode, Integer>emptyMap());

            Command cmd = null;
                String response = null;
            try (Session session = sshClient.startSession()) {
             cmd = session.exec("sudo service riak start");
             response = IOUtils.readFully(cmd.getInputStream()).toString();
        cmd.join(timeout, timeUnit);
                } finally {
        if (cmd != null) {
            cmd.close();
        }
    }

最佳答案

我有点担心,但我认为你的问题是:

    // Start a new session
    session = sshClient.startSession();
    session.allocatePTY("vt220", 80,24,0,0,Collections.<PTYMode, Integer>emptyMap());

    Command cmd = null;
    String response = null;
    // your allocating a new session there
    try (Session session = sshClient.startSession()) {

         cmd = session.exec("sudo service riak start");
         response = IOUtils.readFully(cmd.getInputStream()).toString();
         cmd.join(timeout, timeUnit);
    } finally {
        if (cmd != null) 
            cmd.close();
    }

我认为,如果您只启动一个 session ,在其上分配一个 PTY,然后在该 session 上运行命令,您可能会感兴趣:

    session = sshClient.startSession();
    session.allocatePTY("vt220", 80,24,0,0,Collections.<PTYMode, Integer>emptyMap());
    Command cmd = session.exec("sudo service riak start");
    String response = IOUtils.readFully(cmd.getInputStream()).toString();
    cmd.join(timeout, timeUnit);

关于java - 使用 sshj java 库在我的 Amazon EC2 机器上执行 "sudo"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406425/

相关文章:

java - 使用indexOf从文本文件中检索电话号码

java - 自动关闭和断开 java sshj session

java - connect() 上的 Android SSH 异常 - "KeyFactory ECDSA implementation not found"

java - RESTEasy 和方括号中的 MultivaluedMap

java - 如何在 Java 中手动将 cookie 添加到 Web 服务调用中?

java - 使用 SSHJ 时进行 Sudo 访问

java - "Could not load known_hosts"使用 SSHJ 的异常

java - 在 ssh 中执行命令序列

java - 如何在Spring Security 4中动态修改登录用户的角色?

java - Dynamodb 中针对 ConditionalCheckFailedException 的 AWS 类(class)?