Java循环接收终端输入_如何从Java程序(即通过编程)将用户输入发送到终端?

在Java程序中,使用Runtime.getRuntime().exec()执行`sudo`命令时可能会遇到需要手动输入密码的问题。博客作者尝试通过outputStream写入密码,但仍然被要求再次输入。解决方案是利用`sudo -S`选项,通过管道将密码传入。然而,这种方法的安全性可能受到质疑。文章讨论了如何在不依赖shell脚本的情况下,通过Java程序提供密码执行sudo命令的挑战。
摘要由CSDN通过智能技术生成

我正在从Java程序执行命令

Process myProcess = Runtime.getRuntime().exec("sudo cat /etc/sudoers"); //It asks for password so I send password through outputstream from my program.

InputStream inputStream = myProcess.getInputStream();

OutputStream outputStream = myProcess.getOutputStream();

outputStream.write("mypassword".getBytes()); // write password in stream

outputStream.flush();

outputStream.close();

但是问题在于,它再次向我询问密码,因为我已经通过程序的outputstream发送了密码.

为了解决这个问题,我尝试了很多次,但实际上并未完成.

通过使用shell脚本,我可以向终端提供密码,并且我的程序可以正常工作

但这不是最灵活的方法.

您能建议我通过我的java程序提供密码的任何方式吗? (而不是shell编程)

解决方法:

您可以使用sudo的-S选项来实现:

String[] cmd = {"/bash/bin","-c","echo yourpassword| sudo -S your command"};

Runtime.getRuntime.exec(cmd);

但是我不确定这是值得推荐的.

标签:java,linux,ubuntu,terminal,sudo

来源: https://codeday.me/bug/20191012/1899995.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值