当我使用PuTTY连接到SSH时,我得到如下消息:
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-98-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
deb@ubuntu:~$类似地,当我使用JSch库进行连接时,我也应该在Java中获得相同的消息。请你帮我解决这个问题。我在下面提供我的代码细节。
public String connect() {
String errorMessage = null;
try {
sesConnection = jschSSHChannel.getSession(userName, ipOrHostName, PORT);
sesConnection.setPassword(password);
sesConnection.setConfig("StrictHostKeyChecking", "no");
sesConnection.connect(TIMEOUT);
//After connecting, I should get the welcome message
} catch (JSchException jschX) {
errorMessage = jschX.getMessage();
}
return errorMessage;
}在执行JSch中的命令之前,我想从unix系统获得欢迎消息。关于如何得到它请提供帮助。
发布于 2019-01-05 17:06:43
您所看到的消息只是打印在shell输出上。
这与自动读取和执行命令不太一致。
我一般要自动执行命令,您可以正确地计划使用SSH通道"exec“(ChannelExec in JSch)。但那个频道不会给你信息。
您必须使用"shell“通道(ChannelShell in JSch)。但是,该通道的目的是实现交互式shell会话。不是自动执行命令,也不是解析命令输出。特别是在你的问题中,找出“欢迎信息”的结尾是不可能的。您必须逐行读取输出,直到得到提示符("deb@ubuntu:~$")。
或者,如果用例允许,可以使用ChannelShell获取消息,然后使用ChannelExec执行命令。
您最好与服务器管理员交谈,使用不同的API (比如使用SSH2_MSG_USERAUTH_BANNER,甚至其他方式)来提供所需的信息。请参阅我对SSH MOTD per user的回答,以了解服务器如何提供“欢迎消息”。如果服务器使用SSH2_MSG_USERAUTH_BANNER,则可以使用UserInfo.showMessage捕获消息。另见How to read the SSH key-sig pair banner (for generating SSH password) after connecting to host in Java?
https://stackoverflow.com/questions/54050436
复制相似问题