栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java JSch更改远程计算机上的用户并执行命令

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java JSch更改远程计算机上的用户并执行命令

您在这里遇到几个问题。

首先,SSH连接中的每个通道都独立于其他通道,每个exec通道中的命令都在其自己的shell(命令行解释器)中执行。因此,您在一个频道中所做的任何更改对其他频道完全没有影响。您也不能做这样的事情:

runSshCommand("cd documents", session);runSshCommand("ls -l", session);

(实际上,您可以执行此操作,但它不会显示

documents
目录的内容,而是显示主目录的内容。)

对于

cd
,您可以通过将两个命令作为一个“命令”传递来解决,以在同一
exec
通道中使用:

runSshCommand("cd documents; ls -l");

;
您也可以使用换行符
n
来分隔命令,或者您的Shell接受的其他命令。)

因为

su
这行不通,我们来解决 第二个问题

su
不是更改当前外壳状态的命令(例如
cd
),而是在现有外壳内部打开新外壳的命令。当你离开开始由壳它只会返回外壳
su
(例如,通过
exit
logout
或最终的文件),然后你再相同的用户面前。

要将命令传递到“内壳”,您必须将它们传递到壳输入。或使用的

-c
--command
)参数
su

runSshCommand("su -c 'tail -1 ~/mylog.log' - john ",session);

然后,您可能会遇到 第三个问题

su
将要求输入john的密码,并可能拒绝从标准输入中读取它,但是尝试从终端读取它。而且您的频道没有伪终端。您可以尝试使用
cannel.setPty(true)
密码,然后将其实际写到输出流,尽管我不确定这是否可行。

替代方案:

su-c
可以使用代替
sudo
,而可以将其配置为不为某些命令和用户要求输入密码(否则,您将再次遇到相同的终端问题)。或者,您可以直接以身份登录
john
,或使tom可读该日志文件。(此外,我希望您的真实密码比您的源代码中的密码更好。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号