[英]“sudo” command executed with JSch requires password, even when the password is not required in an interactive SSH session
從Linux命令外殼,我可以使用用戶ABC
與我們的CentOS計算機建立SSH連接。 成功建立SSH連接后,我可以運行sudo
命令,不需要密碼。
sudo /usr/bin/rootsh -i -u root
在JSch程序中,我使用用戶ABC
建立SSH連接,然后執行上述命令,但是它詢問我:
[sudo] password for [**ABC**]
我正在使用以下代碼打開頻道:
session.openChannel("exec");
我不明白為什么即使沒有密碼也要求輸入密碼。 它還要求輸入ABC
密碼,但是在我的sudo
命令中,我已經指定了root
用戶。
我怎么解決這個問題?
您很可能已設置了sudoers
中的requiretty
選項。
JSch by不為exec
通道分配偽終端。
刪除requiretty
選項。 那是唯一正確的選擇。
如果無法刪除它,則可以通過調用以下命令來強制JSch分配偽終端:
channelExec.setPty(true);
另請參閱使用JSch sudo示例和Channel.setPty以在遠程主機上運行sudo命令 。
但這不是一個好的選擇,因為它會給您帶來很多討厭的副作用。 偽終端旨在用於交互式用途,而不是用於自動執行命令。
有關示例,請參見
sudo
也是如此。 您不應該自動執行sudo
。 正確的解決方案是設置僅具有任務所需特權的專用私鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.