我不熟悉JSch。但是如果你有root權限,你可以更新你的sudoers配置文件來解決這個問題。添加下面一行到/ etc/sudoers文件
Defaults:USERNAME_HERE !requiretty
也許別人可以詳細說明這是否是一個好主意或沒有,這超出了我的知識範圍,但我很想知道更多嗎?
我只在一個特定的情況下使用這種方法。我們有一個通過rsync備份遠程服務器集羣的cronjob,但爲了成功運行rsync,它需要sudo權限。
要解決這個問題,我做了以下事項
- 創建了一個用戶「backupuser」 - 在兩臺服務器上本地&遠程
添加以下兩行到/ etc/sudoers文件 - 只需在你想要爲用戶授予sudo權限的服務器。在我們的例子中,只在遠程服務器上。
backupuser ALL = NOPASSWD: /usr/bin/rsync
DEFAULTS:backupuser !requiretty
添加上述兩行授予用戶,「backupuser」須藤權限rsync命令,而無需輸入密碼,沒有必要的TTY連接。
以下是它的工作原理 -
第一行分爲兩部分。
USER SPECIFICATION OPTION_TAG (: CONDITIONS(opt))
用戶規範 - 設置這些選項適用(S)也給用戶。
backupuser
OPTION_TAG - 您要授予選項的標籤。在這種情況下,用戶被授予sudo權限而不必輸入密碼。 (見人sudoers的可用的標籤列表)
ALL = NOPASSWD
條件 - 你也必須把關於何時授予須藤權限條件的選項。在這種情況下,用戶只有sudo權限才能運行rsync命令。
: /usr/bin/rsync
第二行,覆蓋您需要一個終端連接到運行須藤(TTY要求)sudo命令的默認要求。並且它僅將該特權授予用戶帳戶'backupuser'。 (見人sudoers的爲其他默認設置)
DEFAULTS:backupuser !requiretty
希望這有助於解答您的問題。我知道它有一點切線,但我想給出一個完整的解釋。對於更多的信息,你也可以結帳man sudo
這裏在一個RHEL 6.3的實例,一切工作完美的setPty(true); – koppor 2012-08-21 16:00:13
你如何阻止僞終端?你使用簡單的setPty(false)還是需要做別的事情? – waqas 2012-08-22 09:38:41