我正在嘗試使用 java 1.8 和 OS Solaris 11 運行一個簡單的命令。我的程序在特定用戶下運行,并且該命令必須在 SuperUser 下運行這是命令:Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");如果我運行命令,它會正常工作并要求輸入密碼,然后我輸入密碼我會得到結果。問題是我在java中運行它這是我的代碼Process proc = Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");PrintWriter out = new PrintWriter(new OutputStreamWriter(proc.getOutputStream()));out.println(password);out.flush();int exitCode= proc.waitFor();System.out.println(exitCode);//exitCode = 1BufferedReader pArgs= new BufferedReader( new InputStreamReader(proc.getInputStream()));if((line=pArgs.readLine()) != null){ //do something}else{ //something not working = ERROR }我認為該行等于 null 因為密碼集中的某些內容不正確蝙蝠我不確定我做錯了什么?
3 回答

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
如何通過java中的runtime.exec()傳遞用戶和密碼
如果您想使用su
.
Solarissu
使用該getpass()
函數從用戶那里獲取必要的密碼。
從Solarisgetpass()
手冊頁:
描述
該
getpass()
函數打開進程的控制終端,將空終止字符串寫入該設備prompt
,禁用回顯,讀取字符串直到下一個換行符或 EOF,恢復終端狀態并關閉終端。...
錯誤
如果出現以下情況,
getpass()
和getpassphrase()
函數可能會失?。?/p>...
ENXIO
該進程沒有控制終端。
su
要么從控制終端獲取密碼,要么失敗。
這是一個深思熟慮的設計決策,幾乎不可能執行不安全的操作,例如自動輸入密碼。

MYYA
TA貢獻1868條經驗 獲得超4個贊
非常感謝您的所有回答。但我的解決方案有點不同。決定使用可以從兩個進程寫入和讀取的外部文件。整個目標是再次握手,以防在根運行的進程失?。撮T狗)。
所以現在不需要使用命令
Runtime.getRuntime().exec("su - root -c 'pargs -l 1111'");
當根進程開始運行時,它會將拍號記錄到文件中。如果用戶的進程(每X次讀取文件)發現簽名發生了變化,他將再次握手。
添加回答
舉報
0/150
提交
取消