解決sudo: sorry, you must have a tty to run sudo

來源:互聯網
上載者:User

解決sudo: sorry, you must have a tty to run sudo 前幾天遇到一個問題,在一個終端中調用另一個shell,始終是無法執行的,後來捕捉到報錯資訊為sudo: sorry, you must have a tty to run sudo,後來,在網上瞭解到可以如下解決:1. 編輯 /etc/sudoers   1)Defaults    requiretty,修改為 #Defaults    requiretty,表示不需要控制終端。   2)Defaults    requiretty,修改為 Defaults:nobody !requiretty,表示僅 nobody 使用者不需要控制終端。        如果修改為 Defaults:%nobody !requiretty,表示僅 nobody 組不需要控制終端。 其實只要注釋掉)Defaults    requiretty 那個就可以了。表示在執行的時候不開啟終端。但是,有的shell必須要有終端才可以執行。這樣顯然是不行的。後來,又找到一片文章才搞定。下面為抄錄的,僅為記錄以後使用。 有些程式/指令碼可能在沒有控制終端的環境下上執行(如系統啟動服務時, Daemon,或者是setsid啟動的程式等) 但可能這個程式需要控制終端, 這這麼辦呢?如我們的例子: 我們在linux啟動時啟動一個服務, 可是中間有個程式(舊的systemtap)使用了sudo但sudo需要控制終端(當然可以通過修改sudo的設定檔, 但這樣很對使用者不友好啊)例子: (setsid 啟動的程式會失去控制終端)# setsid sudo lssudo: sorry, you must have a tty to run sudo(如果你的系統沒有輸出這句話, 那就是你的系統的sudo設定檔允許sudo可以在這個,請確保已經設定了Defaults    requiretty)沒有控制中斷的時候, 開啟控制終端是這樣的效果:# setsid head -c 0 /dev/ttyhead: cannot open `/dev/tty' for reading: No such device or address為瞭解決這個問題, 所以應該使用能建立(偽)控制終端的程式來啟動你的程式如: script, expect如:# setsid script -c "sudo ls" /dev/null或:# setsid expect -c 'spawn sudo ls; expect'#開啟控制終端成功:# setsid script -c 'head -c 0 /dev/tty' /dev/null # setsid expect -c 'spawn head -c 0 /dev/tty; expect'不過 setsid 跟 script 組合使用有著奇怪的bug, 我這段時間非常的depression,這樣對script, expect來說, 都是大材小用了
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.