【问题标题】:SSHJ+ExpectIt: Unable to send multiple commandsSSHJ+ExpectIt:无法发送多个命令
【发布时间】:2015-03-19 10:56:04
【问题描述】:

我正在使用 SSHJ 和 ExpectIt 将多个命令发送到托管在 Amazon EC2 上的虚拟机。我没有收到任何错误,但是 ExpectIt 只执行第一个命令而忘记了其余的。你能找出我在这里做错了什么吗?

{
 SSHClient ssh=new SSHClient();
 Session session;
 Shell shell;
 session=ssh.startSession();
 session.allocateDefaultPTY();
 shell=session.startShell();
 Expect expect = new ExpectBuilder()
        .withOutput(shell.getOutputStream())
        .withInputs(shell.getInputStream(), shell.getErrorStream())
        .build();
 expect.sendLine("sudo useradd "+uname+" -g sftponly -m -d /home/"+uname); //Only this command is getting executed
expect.sendLine("sudo passwd "+uname);
expect.sendLine(pwd);
statusbar.setText("Assigning access key to user...");
expect.sendLine("sudo mkdir /home/"+uname+"/.ssh");
expect.sendLine("sudo touch /home/"+uname+"/.ssh/authorized_keys");
expect.sendLine("sudo echo "+pemfile+">/home/"+uname+"/.ssh/authorized_keys");
statusbar.setText("Providing permissions to user...");
expect.sendLine("sudo chown root /home/"+uname);
expect.sendLine("sudo chmod go-w /home/"+uname);
expect.sendLine("sudo mkdir /home/"+uname+"/"+uname);
expect.sendLine("sudo chmod ug+rwX /home/"+uname);
expect.sendLine("sudo chmod 700 /home/"+uname+"/.ssh");
expect.sendLine("sudo chmod 600 /home/"+uname+"/.ssh/authorized_keys");
expect.sendLine("sudo chmod 755 /home/"+uname);
statusicon.setForeground(Color.green);
statusbar.setText("User created!");
expect.close();
}

注意:此代码中省略了一些敏感(但与此问题无关)代码。

【问题讨论】:

    标签: java ssh amazon-ec2 expect sshj


    【解决方案1】:

    您应该等到服务器处理完一个命令后再发送下一个命令。这是因为您与之通信的远程 shell 会同步执行命令。

    Expect.sendLine 方法非常快,以至于它在第一个命令完成之前传输数据。

    我建议你在每个sendLine之后添加Expect.expect(PROMPT)方法调用来接收a shell prompt,以确保前面的命令完成。

    看看ExpectIt主页上的例子:

    【讨论】:

    • 谢谢,但是问题是系统对ie写的命令没有任何响应。这些命令在没有任何提示的情况下执行,例如“用户创建”、“密码设置”或任何其他提示。那么如何让它期待一个什么都不提供的提示呢?
    • 命令完成后,如果远程 shell 在交互模式下运行,它会打印提示。这就是 session.allocateDefaultPTY() 调用应该做的。如果它不起作用,也许您可​​以尝试调用 session.allocatePTY(...) 。看看这个答案:stackoverflow.com/questions/3395754/…
    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多