Xóa mật khẩu đã nhập trong dấu nhắc mật khẩu ẩn (Linux) bằng phím tắt


106

Có cách nào để xóa tất cả các ký tự mà tôi đã nhập trong dấu nhắc mật khẩu ẩn trong Linux không? Ví dụ: khi tôi SSH tới máy chủ, nó sẽ hỏi mật khẩu của tôi nơi các khóa đã nhập không được hiển thị:

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

Có cách nào để xóa tất cả văn bản đã nhập của tôi mà không phải nhấn backspace trong một khoảng thời gian không xác định? Khi tôi nghĩ rằng tôi đã nhập sai, tôi muốn bắt đầu lại và nhấn backspace trong vài giây là khó chịu. Tôi đã cố gắng Esc, CtrlAđể hy vọng chọn toàn bộ văn bản và Home. CtrlChủy toàn bộ lệnh và tôi phải gửi lại lệnh để thử lại. Đây gần như là giải pháp tốt nhất và nhanh nhất nhưng vẫn không thỏa mãn. Chèn cũng không hoạt động trong vỏ của tôi.


7
Về Ctrl + A, trong thiết bị đầu cuối, điều này thường có nghĩa là "đi đến đầu dòng". Tập hợp các khóa được sử dụng trong thiết bị đầu cuối (đặc biệt là bash) thường gần với Emacs hơn so với Windows.
Điểm_Under

18
Sshing là root thường được coi là một thực hành rất rất xấu.
Sam

Để xóa các ký tự khỏi màn hình, bạn sẽ cần sử dụng các chuỗi điều khiển con trỏ (nếu thiết bị đầu cuối của bạn hỗ trợ chúng). Bằng cách chạy sshtừ một tập lệnh, bạn có thể phân tích chuỗi tham số trước khi chạy.
AFH

4
Hãy chú ý đến những gì @Sam đã nói. Bạn nên vô hiệu hóa đăng nhập gốc ở mọi nơi. Đăng nhập như một người dùng thông thường với một mật khẩu phức tạp và sau đó suđể trở thành root. Bước tiếp theo là vô hiệu hóa các lược đồ xác thực dựa trên mật khẩu trong SSH và sử dụng các khóa để đăng nhập.
kostix

@kostix Tôi khá chắc chắn việc vô hiệu hóa mật khẩu nên là bước đầu tiên. Nếu bạn đang sử dụng mật khẩu, sau đó với su và root bị vô hiệu hóa, đó chỉ là vấn đề nhập mật khẩu mà kẻ tấn công đã đoán lần thứ hai sau khi đăng nhập, vì vậy bạn chỉ nhận được một cái gì đó nếu tên người dùng khó đoán (mà nó thường không được đoán 't, tôi giả sử mà không có số liệu thống kê). Và không có mật khẩu đăng nhập, nó sẽ thêm một bí mật thứ hai, mật khẩu, nhưng nó có giá trị thấp hơn khóa riêng là một bí mật dài hơn.
Không ai vào

Câu trả lời:


163

Bạn có thể xóa toàn bộ mật khẩu đã nhập bằng Ctrl+ U.


6
Điều này cũng hoạt động trong dấu nhắc thiết bị đầu cuối thường xuyên quá!
MoonRunestar

35
Để tham khảo, đây là ràng buộc khóa mặc định trong "chế độ emacs" của readline cho unix-line-discard, được mô tả là "Giết lùi từ con trỏ đến đầu dòng hiện tại." Tham chiếu: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU readline là thư viện đầu vào được sử dụng bởi hầu hết các shell và nhiều chương trình tương tác khác (nhưng không được tích hợp vào tty, vì vậy điều này sẽ không làm việc ở mọi nơi ).
IMSoP

22
@IMSoP Tuy nhiên, chính Ctrl-U được tích hợp vào tty (là ký tự mặc định cho stty killhàm), đó là lý do tại sao nó hoạt động với dấu nhắc mật khẩu ssh.
Random832

5
BTW, Ctrl + K tương đương để xóa từ con trỏ đến cuối dòng.
wjandrea

2
@DennisJaheruddin: Điều đó là không thể, ssh không sử dụng đường dẫn để cung cấp chỉnh sửa dòng. Xem câu trả lời của tôi.
Peter Cordes

14

Không giống như bash, sshdấu nhắc mật khẩu không sử dụng bất kỳ thư viện đầu vào đặc biệt nào như readline. Các tính năng chỉnh sửa dòng chỉ là các tính năng chỉnh sửa dòng POSIX TTY cơ bản.

Vì vậy, bạn có một POSIX TTY ở chế độ "nấu" (không phải là thô), còn gọi là chế độ chính tắc và chỉnh sửa dòng duy nhất có sẵn là những gì được cung cấp bởi kernel. Xem stty(1), và nhận thấy rằng
kill = ^U. Đây cũng là nơi ký tự backspace được xác định ( erase = ^?). Word-erase ( ^W) thuận tiện khi bạn không gõ mù.

lnext = ^V có nghĩa là bạn có thể gõ control-v sau đó bất cứ điều gì (bao gồm control-c) để có được điều khiển theo nghĩa đen-c.

Để gỡ lỗi những gì bạn đã cố gắng làm một cách mù quáng, chạy cathoặc cat > /dev/nulltrong thiết bị đầu cuối của bạn . Nhập nội dung, sau đó xem những gì hoạt động và những gì không chỉnh sửa nó.


readline(được sử dụng bởi bash) đọc ký tự thô và thực hiện chỉnh sửa dòng trong không gian người dùng. Mặc dù vậy, các ràng buộc mặc định của nó tương thích với các ký tự điều khiển TTY mặc định, cho tập hợp các tính năng chỉnh sửa mà cả hai đều cung cấp.

readline vượt xa việc chỉnh sửa dòng đơn giản của một TTY đơn giản. (ví dụ: TTY chỉ có thể xóa các ký tự ở cuối dòng, vì vậy không có ^adeletehoặc mũi tên trái / phải)

Khi bashchạy một lệnh ở nền trước, nó sẽ đặt TTY vào chế độ chính tắc trước tiên (vì đó là mặc định). Vì vậy, chạy stty -a(không có chuyển hướng) sẽ luôn thấy thiết bị đầu cuối của chính nó trong chế độ chính tắc. Nhưng nếu bạn chuyển hướng đầu vào từ một số TTY khác bashđang chạy trên nó, bạn có thể xem cài đặt đầu cuối bash + readline nào được áp dụng. ví dụ: stty -a < /dev/pts/12hiển thị -icanoncho chế độ thô vì tôi bashđang chạy trên thiết bị đầu cuối đó. (Tôi chuyển sang một tab khác và chạy tty, sau đó sử dụng đường dẫn tệp thiết bị đó từ thiết bị đầu cuối đầu tiên). Nếu tôi chạy cattrong thiết bị đầu cuối khác đó, tôi sẽ thấy icanonchế độ chính tắc.

Liên quan: TTY phá hủy

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

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


Bạn thực sự có thể chỉ cần gõ 'stty' để xem tất cả các cài đặt hiện tại. Sử dụng 'stty rows ##' hoặc 'stty cols ##' sẽ cho phép bạn thay đổi trên Fly có bao nhiêu hàng hoặc cột mà cửa sổ terminal có sẵn cho nó. Điều này đặc biệt hữu ích khi bạn làm việc trong một cửa sổ trong một cửa sổ thông qua một cái gì đó như VNC mà không nhất thiết phải nắm bắt cửa sổ bên ngoài của bạn lớn như thế nào. Về cơ bản, bạn có thể Xác định vùng hoạt động của mình nhỏ hơn cửa sổ và sau đó không phải cuộn xung quanh. Cho phép VI và những thứ khác để vẫn hoạt động đúng. Nó cũng có thể ánh xạ lại backspace và xóa trên Fly.
Rowan Hawkins

@RowanHawkins: đoạn cuối của tôi được chỉnh sửa kém. Đã sửa bây giờ. Tôi đã cố gắng đưa ra quan điểm rằng bằng cách chuyển hướng từ một tty khác, bạn có thể thấy các sttycài đặt / ioctl mà chính bash + readline đã áp dụng trong chế độ thô. (Và thực tế là nó ở chế độ thô, nơi hầu hết các ký tự đặc biệt không áp dụng)
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.