web-dev-qa-db-ja.com

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

Linuxで隠しパスワードプロンプトに入力したすべての文字を削除する方法はありますか?たとえば、サーバにSSH接続すると、入力されたキーが表示されていない場所でパスワードを要求されます。

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

未知の時間バックスペースを押さずに入力したテキストをすべて削除する方法はありますか?私が間違ったものを入力したと思うとき、私はやり直すことを望み、数秒間バックスペースを押すのは面倒です。私は試した Esc、 CtrlA うまくいけばテキスト全体を選択して Home。 CtrlC コマンド全体をキャンセルするので、もう一度コマンドを送信して再試行する必要があります。これはほとんど最善かつ最速の解決策ですが、まだ満足のいくものではありません。私のシェルでも挿入は機能しません。

106
bugybunny

入力したパスワード全体を削除するには Ctrl+U

163
Ipor Sircer

bashとは異なり、sshのパスワードPromptはreadline.のような特別な端末入力ライブラリを使用しません。

ですから、POSIX TTYは "cooked"モード(rawモードではありません)、つまりカノニカルモードであり、利用可能な唯一の行編集はカーネルによって提供されるものです。 stty(1) を参照してください。
kill = ^Uこれはバックスペース文字が定義されている場所でもあります(erase = ^?)。 blindと入力していないときは、単語消去(^W)が便利です。

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

盲目的にやろうとしていたことをデバッグするには、端末のcatまたはcat > /dev/nullを実行します。ものを入力し、何がうまくいくのか、何が編集できないのかを見てください。


readlinebashによって使用されます)は、生の文字を読み取り、ユーザースペースで行編集を行います。ただし、デフォルトのバインディングはデフォルトのTTY制御文字と互換性があります。ただし、どちらも編集機能のサブセットとして提供されています。

readlineは普通のTTYの単純な行編集を超えたものです。 (例えばTTYは行末の文字しか削除できないので、^adeleteや左右の矢印はありません)

bashがフォアグラウンドでコマンドを実行すると、最初にTTYを正規モードにします(これがデフォルトです)。そのため、(リダイレクトなしで)stty -aを実行すると、常に標準モードの専用端末が認識されます。しかし、bashが実行されている他のTTYからの入力をリダイレクトすると、bash + readlineが適用されている端末設定を確認できます。例えば私はその端末でbashを実行しているので、stty -a < /dev/pts/12はrawモードの-icanonを示しています。 (私は別のタブに切り替えてttyを実行し、それから最初の端末からそのデバイスファイルパスを使いました)。他の端末でcatを実行した場合、標準モードではicanonが表示されます。

Related: TTYは解読しました

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

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

14
Peter Cordes