題 使用快捷方式在隱藏密碼提示(Linux)中刪除輸入的密碼


有沒有辦法刪除我在Linux中隱藏密碼提示中輸入的所有字符?例如,當我通過SSH連接到服務器時,它會詢問我的密碼,其中未顯示輸入的密鑰:

$ ssh root@somehost
root@somehost's password:

有沒有辦法刪除我輸入的所有文本而無需按退格鍵未知的時間?當我想我輸入錯誤時我想重新開始並按退格鍵幾秒鐘很煩人。我試過了 退出按Ctrl一個 希望選擇整個文本和 按CtrlC 取消整個命令,我必須再次發送命令重試。這幾乎是最好和最快的解決方案,但仍然不能令人滿意。插入在我的shell中也不起作用。


105
2017-11-01 14:05


起源


關於Ctrl + A,在終端中這通常意味著“轉到行首”。終端中使用的密鑰集(尤其是bash)通常更靠近Emacs而不是Windows。 - Score_Under
以root身份進行sshing通常被認為是一種非常糟糕的做法。 - Sam
要從屏幕上刪除字符,您需要使用光標控制序列(如果您的終端支持它們)。通過運行 ssh 從腳本中,您可以在運行之前分析參數字符串。 - AFH
請注意@Sam告訴的內容。您應該在任何地方禁用root登錄。以具有復雜密碼的常規用戶身份登錄 su 成為根。下一步是在SSH中禁用基於密碼的身份驗證方案,並使用密鑰進行登錄。 - kostix
@kostix我非常確定禁用密碼應該是第一步。如果您使用的是密碼,那麼使用su和disabled root,只需要輸入密碼,攻擊者在登錄後第二次就已經猜到了密碼,所以如果用戶名很難猜到(通常是不,我假設沒有統計數據。並且沒有密碼登錄它會添加第二個密碼,即密碼,但這比私鑰更長,這是一個更長的秘密。 - Nobody


答案:


您可以刪除整個鍵入的密碼 按Ctrl+ü


163
2017-11-01 14:07



這也適用於常規終端提示! - MoonRunestar
作為參考,這是readline的“emacs模式”中的默認鍵綁定 unix-line-discard,描述為“從光標向後殺死到當前行的開頭”。參考: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline是大多數shell和許多其他交互式程序使用的輸入庫(但是 不 內置於tty中,所以這不起作用 到處)。 - IMSoP
@IMSoP但是,Ctrl-U本身 是 內置於tty中(作為默認字符) stty kill 功能),這就是為什麼它適用於ssh密碼提示。 - Random832
順便說一句,Ctrl + K相當於從光標刪除到 結束 這條線。 - wjandrea
@DennisJaheruddin:這是不可能的,ssh不使用readline來提供行編輯。看到我的回答。 - Peter Cordes


不像 bashssh的密碼提示不使用任何特殊的終端輸入庫 readline  行編輯功能只是基線POSIX TTY行編輯功能。

所以你有一個處於“熟”模式(非原始)的POSIX TTY,也就是規範模式,並且唯一可用的行編輯是內核提供的。看到 stty(1),並註意到
kill = ^U。這也是定義退格字符的位置(erase = ^?)。字擦(^W)當你不打字時很方便。

lnext = ^V 意味著您可以鍵入control-v然後鍵入任何內容(包括control-c)以獲取文字控件-c。

要調試你試圖盲目做的事,運行 cat 要么 cat > /dev/null 在你的終端。輸入內容,然後查看哪些有效,哪些無法編輯。


readline (用於 bash)讀取原始字符並在用戶空間中進行行編輯。但是,它的默認綁定與默認的TTY控製字符兼容,因為它們都提供了編輯功能的子集。

readline超越了簡單TTY的簡單行編輯。 (例如,TTY只能刪除行尾的字符,所以沒有 ^a 和 delete 或左/右箭頭)

什麼時候 bash 在前台運行命令,它首先將TTY置於規範模式(因為這是默認模式)。好跑 stty -a (沒有重定向)將始終在規範模式下看到自己的終端。但是如果你從其他一些TTY重定向輸入 bash 在它上面運行,你可以看到bash + readline應用了什麼終端設置。例如 stty -a < /dev/pts/12 節目 -icanon 對於原始模式,因為我有一個 bash 在那個終端上運行。 (我切換到另一個標籤然後跑了 tty,然後從第一個終端使用該設備文件路徑)。如果我跑了 cat 在其他終端,我會看到 icanon 對於規範模式。

有關: TTY神秘化了

https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html

https://en.wikipedia.org/wiki/POSIX_terminal_interface


14
2017-11-02 14:05



您實際上只需輸入'stty'即可查看所有當前設置。使用'stty rows ##'或'stty cols ##'將允許您在Fly上更改終端窗口可用的行數或列數。當你在窗戶的窗戶中通過像VNC這樣的東西工作時,這尤其方便,因為VNC不一定能夠正確掌握外窗的大小。您基本上可以將活動區域定義為小於其所在的窗口,然後無需滾動。允許VI和其他東西仍能正常工作。它還可以重新映射退格並在飛行中刪除。 - Rowan Hawkins
@RowanHawkins:我的最後一段編輯很差。現在修復了。我試圖說明通過從另一個tty重定向,你可以看到 stty / ioctl設置bash + readline本身已在原始模式下應用。 (事實上它完全處於原始模式,大部分特殊字符都不適用) - Peter Cordes