我有一个服务器的列表,我需要至少每30天登录一次,以保持我的访问权限,所以对于我使用JSch的第一个程序,我想创建一个程序,它将接受主机列表,用户名和密码,并让我登录和退出每个服务器。
我可以很好地连接到服务器,甚至可以执行命令,但是如果我运行Unix命令"last“,它不会显示我已经登录到服务器。任何关于为什么我运行程序时它不能记录,但如果我使用putty登录,它就能记录下来的见解,我将不胜感激。
JSch jsch = new JSch();
Session session = jsch.getSession(userId, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect(timeout);
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
channel.connect();
InputStream commandOutput = channel.getInputStream();
int readByte = commandOutput.read();
while(readByte != 0xffffffff)
{
outputBuffer.append((char)readByte);
readByte = commandOutput.read();
}
channel.disconnect();
session.disconnect();发布于 2012-10-31 11:23:55
我猜如果你分配一个伪终端,
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
((ChannelExec)channel).setPty(true); // !!!!
channel.connect();您将在命令"last“中找到它,但是您可能会从终端仿真器的输入流中获得不必要的字符序列。检查/var/log/secure,/var/log/auth.log,而不是检查上一条命令的输出如何?
然后,在调用Channel#connect()之前调用Channel#getInputStream()会更好,因为在Channel#connect()和Channel#getInputStream()期间接收到的一些数据可能会丢失。
https://stackoverflow.com/questions/13147586
复制相似问题