遠程通信(ssh)我試圖從我的java代碼重新啓動遠程服務器。我有無密碼的ssh設置,並且sudoers文件具有參數,以便執行系統命令時不需要密碼。 我從運行「bash shell的」我的本地機器上,我的遠程系統shutsdown以下命令,來了就好了無法通過使用Runtime.Exec
ssh -t [email protected] 'sudo reboot'
上面的命令重新啓動,但不檢查任何密碼的遠程服務器;現在我通過上面的命令直通Java代碼如下(我在特殊字符「包圍須藤重啓」,以使其作爲一個命令)
String cmd="ssh -t [email protected] \'sudo reboot\'";
log.info("Executing command.."+cmd);
p = Runtime.getRuntime().exec(cmd);
//open error stream and input stream and process
不過,我得到以下錯誤
[2014-10-30 19:07:55,593] INFO Executing command..ssh -t [email protected] 'sudo reboot'
[2014-10-30 19:07:57,070] ERROR ERROR while executing command: ssh -t [email protected] 'sudo reboot'
[2014-10-30 19:07:57,070] ERROR Pseudo-terminal will not be allocated because stdin is not a terminal.
bash: sudo reboot: command not found
我在做什麼錯? 我想避免第三方庫(例如:JSch)。我使用centos6和Java 7
SOLUTION
1)取出由@hcs建議單引號。然後我得到另一個錯誤MESG「.. TTY ..」
2)更新sudoers文件中的鏈接https://serverfault.com/questions/15667/remotely-reboot-tomcat
嘗試從各地''須藤reboot''去掉單引號,我認爲這是試圖運行命令,而不是以'reboot'作爲參數運行'sudo'。 – hcs 2014-10-30 19:03:09
某些命令不能從Java完成。就是這樣。它可能是sudo,這需要安全性。或重新啓動,這應該沒問題。 Java不能處理CLI控制檯的所有內容。例如。使用回車來更改輸出的文本。原生應用程序可以,但Java始終存在此問題。有幾個控制檯類和一個bu太陽,但它仍然缺乏。 – ldmtwo 2014-10-30 19:14:56
@ hcs。感謝解決它。發佈它作爲答案,我會接受它 – 2014-10-30 19:28:57