首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSch SSH连接未将用户登录到服务器

JSch SSH连接未将用户登录到服务器
EN

Stack Overflow用户
提问于 2012-10-31 05:06:50
回答 1查看 668关注 0票数 0

我有一个服务器的列表,我需要至少每30天登录一次,以保持我的访问权限,所以对于我使用JSch的第一个程序,我想创建一个程序,它将接受主机列表,用户名和密码,并让我登录和退出每个服务器。

我可以很好地连接到服务器,甚至可以执行命令,但是如果我运行Unix命令"last“,它不会显示我已经登录到服务器。任何关于为什么我运行程序时它不能记录,但如果我使用putty登录,它就能记录下来的见解,我将不胜感激。

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-31 11:23:55

我猜如果你分配一个伪终端,

代码语言:javascript
复制
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()期间接收到的一些数据可能会丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13147586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档