隠しパスワードプロンプト(Linux)で入力したパスワードをショートカットで削除する

keyboard-shortcuts linux passwords terminal

Linuxの隠しパスワードプロンプトで入力した文字をすべて削除する方法はありますか?例えば、私がサーバーにSSHするとき、それは入力されたキーが表示されないところに私のパスワードを求めています

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

不明な時間バックスペースを押さなくても、入力したテキストをすべて削除する方法はありますか?何か間違って入力したと思うとやり直したくなりますが、数秒間バックスペースを押すのは面倒です。私はEsc, CtrlAを試してみましたが、うまくいけばテキスト全体を選択することができますし、Homeも試してみました。CtrlCではコマンド全体がキャンセルされてしまい、再度コマンドを送信して再試行しなければなりません。これがほぼベストで最速の解決策ですが、まだ満足のいくものではありません。私のシェルでは Insert も動作しません

  106  None  2017-11-01


ベストアンサー

Ctrl+Uで入力したパスワードを全て削除することができます

163  Ipor Sircer  2017-11-01


bashとは異なり、sshのパスワードプロンプトはreadlineのような特別な端末入力ライブラリを使用しません。行編集機能は、基本的な POSIX TTY 行編集機能にすぎません

つまり、POSIX TTY は “調理された” モード (生ではなく)、別名カノニカルモードにあり、利用可能な行編集はカーネルが提供するものだけです。stty(1) を見て、kill = ^U に注目してください。ここにもバックスペース文字が定義されています(erase = ^?)。Word-erase (^W) は、ブラインドタイピングをしていないときに便利です

lnext = ^V は、control-v と入力してから何でも(control-c を含む)、リテラルの control-c を取得できることを意味します

やみくもにやろうとしていたことをデバッグするには、ターミナルで catcat > /dev/null を実行してください。何かを入力して、それを編集するために何が機能して何が機能しないのかを確認してください


readline (bash で使われる) は、生の文字を読み込んで、ユーザ空間で行編集を行います。しかし、両者が提供する編集機能のサブセットについては、そのデフォルトのバインディングはデフォルトの TTY 制御文字と互換性があります

readline は、プレーンな TTY の単純な行編集をはるかに超えています。(例えば、TTYは行末の文字しか削除できないので、^adeleteや左/右矢印はありません)

bash がフォアグラウンドでコマンドを実行すると、TTY を最初に正規モードにします (これがデフォルトだからです)。そのため、stty -a を (リダイレクトなしで) 実行すると、それ自身のターミナルは常に正規モードで表示されます。しかし、bash が実行されている他の TTY からの入力をリダイレクトすると、bash + readline が適用されたターミナル設定を見ることができます。(別のタブに切り替えて tty を実行し、最初のターミナルからそのデバイスファイルのパスを使っています)。別のターミナルで cat を実行すると、正規モードの icanon が表示されます

関連しています。TTYの仕組みを解明した

Canonical or Not (The GNU C Library)
Canonical or Not (The GNU C Library)
POSIX terminal interface - Wikipedia

14  Peter Cordes  2017-11-02


タイトルとURLをコピーしました