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


106

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

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

不明な時間バックスペースを押すことなく、入力したテキストをすべて削除する方法はありますか?間違った何かを入力したと思ったら、最初からやり直したいのですが、バックスペースを数秒間押すのは面倒です。私が試したEscCtrlAうまくいけば、テキスト全体を選択するようにしてHomeCtrlCコマンド全体をキャンセルし、再試行するにはコマンドを再度送信する必要があります。これはほぼ最良かつ最速のソリューションですが、まだ満足のいくものではありません。シェルでも挿入は機能しません。


7
Ctrl + Aに関しては、ターミナルでは通常「行の先頭に移動」を意味します。端末で使用されるキーのセット(特にbash)は、WindowsよりもEmacsに近いことがよくあります。
Score_Under

18
ルートとしてのSshingは一般的に非常に悪い習慣と見なされます。
サム

画面から文字を削除するには、カーソル制御シーケンスを使用する必要があります(端末でサポートされている場合)。sshスクリプトから実行することにより、実行する前にパラメーター文字列を分析できます。
AFH

4
@Samが言ったことに注意してください。どこでもルートログインを無効にする必要があります。複雑なパスワードを使用して通常のユーザーとしてログインし、surootになります。次のステップは、SSHでパスワードベースの認証スキームを無効にし、ログインにキーを使用することです。
kostix

@kostixパスワードを無効にすることが最初のステップになるはずです。パスワードを使用している場合、suを使用してrootを無効にすると、ログイン後に攻撃者がすでに2度目に推測したパスワードを入力するだけであるため、ユーザー名が推測しにくい場合にのみ何かを得ることができます(多くの場合はそうではありません) 't、統計情報がないと仮定します)。また、パスワードログインを行わない場合、2番目の秘密であるパスワードが追加されますが、これは秘密鍵である長い秘密よりも価値がありません。
誰も

回答:


163

Ctrl+を使用して、入力したパスワード全体を削除できますU


6
これは、通常の端末プロンプトでも機能します!
MoonRunestar

35
参考までに、これはreadlineの「emacsモード」のデフォルトのキーバインディングでunix-line-discard、「カーソルから現在行の先頭まで後方にキル」と説明されています。参照:cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readlineは、ほとんどのシェルや他の多くの対話型プログラムで使用される入力ライブラリです(ただし、ttyに組み込まれていないため、どこでも動作します)。
IMSoP

22
@IMSoPただし、Ctrl-U自体stty kill関数のデフォルト文字として)ttyに組み込まれているため、sshパスワードプロンプトで動作します。
Random832

5
ところで、Ctrl + Kはカーソルから行末までを削除するのと同等です。
-wjandrea

2
@DennisJaheruddin:それは不可能です。sshはreadlineを使用して行編集を提供しません。私の答えをご覧ください。
ピーターコーデス

14

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

そのため、POSIX TTYが「調理済み」モード(rawではない)、つまり標準モードであり、利用可能な行編集はカーネルによって提供されるものだけです。参照してくださいstty(1)、とのことを注意してください
kill = ^U。これは、バックスペース文字が定義されている場所でもありerase = ^?ます()。単語消去(^W)は、ブラインドを入力しないときに便利です。

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

盲目的にやろうとしていたことをデバッグするには、実行するcatcat > /dev/null、ターミナルで実行します。ものを入力してから、何が機能し、何が編集できないかを確認します。


readline(で使用bash)生の文字を読み取り、ユーザースペースで行編集を行います。ただし、デフォルトのバインディングは、両方が提供する編集機能のサブセットについては、デフォルトのTTY制御文字と互換性があります。

readlineは、単純なTTYの単純な行編集をはるかに超えています。(例えばTTYは行の末尾の文字を削除することができますので、何もありません^aし、deleteあるいは左/右矢印)

ときにbashフォアグラウンドでコマンドを実行します(それがデフォルトだから)、それは最初のカノニカルモードにTTYを置きます。そのため、stty -a(リダイレクトなしで)実行すると、常に標準モードで独自のターミナルが表示されます。しかし、実行されている他のTTYからの入力をリダイレクトするbashと、bash + readlineが適用された端末設定を確認できます。たとえば、その端末で実行しているため、rawモードで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


実際に「stty」と入力するだけで、現在のすべての設定を確認できます。「stty rows ##」または「stty cols ##」を使用すると、端末ウィンドウで使用できる行または列の数をFlyで変更できます。これは、外部ウィンドウの大きさを適切に把握できないVNCのようなものを介してウィンドウ内のウィンドウで作業している場合に特に便利です。基本的に、アクティブな領域を、それが入っているウィンドウよりも小さく、スクロールする必要がないように定義できます。VIおよびその他のものが適切に動作することを許可します。また、バックスペースを再マップし、その場で削除することもできます。
ローワンホーキンス

@RowanHawkins:私の最後の段落はあまり編集されていません。修正されました。私は、別のttyからリダイレクトすることでstty、bash + readline自体がrawモードで適用した/ ioctl設定を見ることができると主張しようとしました。(そして、ほとんどの特殊文字が適用されないローモードであるという事実)
ピーターコーデス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.