매일 사용하는 SSH ARM 머신에서 이상한 상황이 발생했습니다. 서버에 연결하고 Ctrl+를 눌러 BASH 기능을 P호출할 때마다 previous-history
SSH 연결이 정지됩니다. 물결표 SSH 시퀀스를 통해서만 종료할 수 있습니다. 이에 대한 가능한 이유를 조사하려고 합니다.
previous-history
위쪽 화살표를 눌러도 잘 작동하므로 이것은 BASH 버그가 아닙니다.Ctrl+ P예외적인 상황이 적용되지 않으며 다음 사항이 적용됩니다
bind -p
.$ bind -p | grep previous-history "\C-p": previous-history "\eOA": previous-history "\e[A": previous-history
Ctrl+를 이와 같은 P다른 기능에 바인딩하는 것은 도움이 되지 않습니다. - Ctrl+는 P여전히 SSH를 정지시킵니다.
$ bind '"\C-p":"\necho hi\n"'`
CtrlBASH는 +, ++의 원래 문자를 올바르게 인쇄합니다 .PCtrlV CtrlP
^P
$TERM
로 설정하면screen
BASH/etc/termcap
readline은 기본적으로 올바른 값(예: Ctrl+ L화면 지우기)을 사용합니다.$TERM
xterm 또는 linux로 설정한 후에도 SSH가 계속 정지됩니다 Ctrl.P다음
--noprofile
을 사용하여 BASH를 시작해 보았지만 +가 여전히 작동하지 않습니다.--nobashrc
CtrlP서버에 연결되어 있지만
-vvv
로그 메시지에서 이상한 점을 발견하지 못했습니다SSH 연결이 정지되면 문제 없이 다른 서브셸의 동일한 서버에 연결할 수 있습니다. 이 작업을 수행한 후 이전 서브셸에서 정지되었던 세션이 다시 정상이 되었습니다. 내가 입력한 내용을 볼 수 있지만 세션이 정지된 동안 입력한 내용이 모두 표시되지는 않습니다.
로컬 문제를 해결하기 위해 여러 컴퓨터에서 이 서버에 연결했지만 Ctrl+ P작동하지 않았습니다 .
배쉬 버전:
GNU bash, 버전 4.1.5(1)-릴리스(armv7l-unknown-linux-gnueabi)
SSH 버전:
OpenSSH_5.3p1, OpenSSL 1.0.1c 2012년 5월 10일
리눅스 커널:
2030년 10월 3일
이 행동의 이유가 무엇인지 모르겠습니다. 나는 Ctrl+ P키 바인딩에 익숙합니다. 아는 사람 있나요?
답변1
SSH에서 디버깅할 때 사용됩니다.
ssh -vvv remotehost
최대 디버그 출력 활성화: 원격 측으로 전송되는 모든 키 입력에 대해 "debug3: NNNN 총 48바이트 기록"이 표시되어야 합니다. Ctrl-P가 표시되지 않으면 문제가 원격이 아닌 로컬(클라이언트)에 있다는 의미입니다.
원격측에서 데몬을 제어할 수 있는 권한이 있습니까? sshd에 대한 -D 및 -d 옵션(역시 -ddd
최대 디버그 출력을 위해)을 사용하면 문제를 연결의 절반으로 격리하는 데 도움이 될 수 있습니다.
로컬 측에 특이한 터미널 키 바인딩이 있습니까? stty -a
또는 stty -a | fgrep '^D'
거기에 바인딩이 있으면 Ctrl-P가 표시되어야 합니다. (무엇을 "중지"해야 합니까?)
클라이언트가 충돌한 후:
- 이와 같은 명령을 실행하면
touch /tmp/foo
서버에 영향을 미치나요? (즉, 정지를 표시하거나 실행합니다.) - SSH 클라이언트 이스케이프를 실행할 수 있나요?
<enter>~?
"지원되는 이스케이프 시퀀스" 목록을 입력하고 얻을 수 있습니까 ?<enter>~.
연결을 입력하고 종료할 수 있습니까 ? 그렇다면 모든 동결은 확실히 서버에 있습니다.
strace를 사용하여 서버 측에서 수행 중인 작업에 대해 더 나은 아이디어를 얻을 수 있습니다.
strace -fo /tmp/strace.out sshd -ddd -D