숨겨진 비밀번호 프롬프트 (Linux)에서 입력 한 비밀번호를 단축키로 삭제


106

Linux에서 숨겨진 비밀번호 프롬프트에 입력 한 모든 문자를 삭제하는 방법이 있습니까? 예를 들어 서버에 SSH를 연결하면 입력 한 키가 표시되지 않은 비밀번호를 묻습니다.

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

백 스페이스를 알 수없는 시간 동안 누르지 않고 입력 한 모든 텍스트를 삭제하는 방법이 있습니까? 내가 잘못 입력했다고 생각하면 다시 시작하고 몇 초 동안 백 스페이스를 누르는 것은 성가신 일입니다. 나는 노력 Esc, CtrlA희망 전체 텍스트를 선택하고 Home. CtrlC전체 명령을 취소하고 다시 시도하려면 명령을 다시 보내야합니다. 이것은 거의 가장 빠르고 빠른 솔루션이지만 여전히 만족스럽지 않습니다. 쉘에서도 삽입이 작동하지 않습니다.


7
터미널에서 Ctrl + A와 관련하여 일반적으로 "행으로 이동"을 의미합니다. 터미널에서 사용되는 키 세트 (특히 bash)는 종종 Windows보다 Emacs에 더 가깝습니다.
Score_Under

18
루트로 치는 것은 일반적으로 매우 나쁜 습관으로 간주됩니다.
Sam

화면에서 문자를 삭제하려면 커서 제어 순서를 사용해야합니다 (터미널이 지원하는 경우). ssh스크립트에서 실행 하면 매개 변수 문자열을 실행하기 전에 분석 할 수 있습니다.
AFH

4
@Sam이 말한 것에주의하십시오. 어디에서나 루트 로그인을 비활성화해야합니다. 복잡한 비밀번호를 사용하여 일반 사용자로 로그인 한 다음 su루트가 되십시오. 다음 단계는 SSH에서 비밀번호 기반 인증 체계를 비활성화하고 로그인에 키를 사용하는 것입니다.
kostix '11

@kostix 암호를 비활성화하는 것이 첫 번째 단계 여야한다고 확신합니다. 암호를 사용하는 경우 su와 disable root를 사용하면 침입자가 이미 로그인 한 후 두 번째로 추측 한 암호를 입력하기 만하면되므로 사용자 이름을 추측하기 어려운 경우에만 얻을 수 있습니다. 't, 나는 통계가없는 것으로 가정합니다). 그리고 비밀번호로 로그인하지 않으면 두 번째 비밀번호 인 비밀번호가 추가되지만 더 긴 비밀 인 개인 키보다 가치가 없습니다.
아무도

답변:


163

Ctrl+를 사용하여 입력 한 전체 비밀번호를 삭제할 수 있습니다 U.


6
이것은 일반 터미널 프롬프트에서도 작동합니다!
MoonRunestar

35
참고로, 이것은 " unix-line-discard커서에서 현재 행의 시작 부분으로 뒤로 이동"으로 설명되는 readline "emacs 모드"의 기본 키 바인딩입니다 . 참고 : cnswww.cns.cwru.edu/php/chet/readline/rluserman.html#SEC17 GNU 작성한 Readline은 대부분 껍질과 많은 대화 형 프로그램에 의해 사용되는 입력 라이브러리 (있지만 하지 청각 장애에 내장 된, 그래서 이것은하지 않습니다 모든 곳에서 작업 ).
IMSoP

22
@IMSoP 그러나 Ctrl-U 자체 tty ( stty kill함수 의 기본 문자)에 내장되어 있기 때문에 ssh 비밀번호 프롬프트에서 작동합니다.
Random832

5
BTW, Ctrl + K는 커서 에서 줄 끝까지 삭제하는 것과 같습니다 .
wjandrea

2
@DennisJaheruddin : 불가능합니다 .ssh는 행 편집을 제공하기 위해 readline을 사용하지 않습니다. 내 대답을 참조하십시오.
Peter Cordes

14

와 달리 bash, ssh비밀번호 프롬프트는와 같은 특별한 터미널 입력 라이브러리를 사용하지 않습니다 readline. 라인 편집 기능은 단지 기본 POSIX TTY 라인 편집 기능입니다.

따라서 "요리 된"모드 (원시 아님), 일명 표준 모드에 POSIX TTY가 있으며 사용 가능한 유일한 행 편집은 커널이 제공하는 것입니다. 참조 stty(1)하고, 그 통지
kill = ^U. 백 스페이스 문자가 정의 된 곳이기도합니다 ( erase = ^?). 단어 지우기 ( ^W)는 맹인을 입력하지 않을 때 편리합니다.

lnext = ^V 즉, control-v를 입력 한 다음 무엇이든 (control-c 포함) 리터럴 control-c를 얻을 수 있습니다.

맹목적으로하려고했던 것을 디버그하려면을 실행 cat하거나 cat > /dev/null터미널에서 실행 하십시오 . 내용을 입력 한 다음 작동하는 것과 편집하지 않는 것을보십시오.


readline(로 사용 bash)은 원시 문자를 읽고 사용자 공간에서 행 편집을 수행합니다. 기본 바인딩은 기본 TTY 제어 문자와 호환되지만 둘 다 제공하는 편집 기능의 하위 세트에 해당합니다.

readline은 단순한 TTY의 단순한 라인 편집을 넘어선 것입니다. (예 : TTY 만 줄의 끝에 문자를 삭제할 수 있습니다, 그래서가 없습니다 ^adelete또는 왼쪽 / 오른쪽 화살표)

bash전경에서 명령을 실행합니다 (즉, 기본이기 때문에), 먼저 표준 모드로 TTY를 넣습니다. 따라서 경로 stty -a재 지정없이 실행 하면 항상 표준 모드에서 자체 터미널이 표시됩니다. 그러나 bash실행중인 다른 TTY에서 입력을 리디렉션 하면 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://ko.wikipedia.org/wiki/POSIX_terminal_interface


실제로 'stty'를 입력하면 모든 현재 설정을 볼 수 있습니다. 'stty rows ##'또는 'stty cols ##'을 사용하면 터미널 창에서 사용 가능한 행 또는 열 수를 플라이에서 변경할 수 있습니다. VNC와 같은 창을 통해 창에서 작업 할 때 특히 유용합니다. VNC와 같이 외부 창의 크기가 제대로 커지는 것은 아닙니다. 기본적으로 활성 영역을 창보다 작게 정의한 다음 스크롤 할 필요가 없습니다. VI와 다른 것들이 여전히 제대로 작동하도록 허용합니다. 백 스페이스를 다시 매핑하고 플라이에서 삭제할 수도 있습니다.
Rowan Hawkins

@RowanHawkins : 마지막 단락이 잘못 편집되었습니다. 지금 수정했습니다. 다른 tty에서 리디렉션하여 sttybash + readline 자체가 원시 모드로 적용 된 / ioctl 설정을 볼 수 있다고 지적하려고했습니다 . (그리고 대부분의 특수 문자가 적용되지 않는 원시 모드에 있다는 사실)
Peter Cordes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.