Control-p SSH 세션 고정

Control-p SSH 세션 고정

매일 사용하는 SSH ARM 머신에서 이상한 상황이 발생했습니다. 서버에 연결하고 Ctrl+를 눌러 BASH 기능을 P호출할 때마다 previous-historySSH 연결이 정지됩니다. 물결표 SSH 시퀀스를 통해서만 종료할 수 있습니다. 이에 대한 가능한 이유를 조사하려고 합니다.

  1. previous-history위쪽 화살표를 눌러도 잘 작동하므로 이것은 BASH 버그가 아닙니다.

  2. Ctrl+ P예외적인 상황이 적용되지 않으며 다음 사항이 적용됩니다 bind -p.

    $ bind -p | grep previous-history
    "\C-p": previous-history
    "\eOA": previous-history
    "\e[A": previous-history
    
  3. Ctrl+를 이와 같은 P다른 기능에 바인딩하는 것은 도움이 되지 않습니다. - Ctrl+는 P여전히 SSH를 정지시킵니다.

    $ bind '"\C-p":"\necho hi\n"'`
    
  4. CtrlBASH는 +, ++의 원래 문자를 올바르게 인쇄합니다 .PCtrlV CtrlP^P

  5. $TERM로 설정하면 screenBASH /etc/termcapreadline은 기본적으로 올바른 값(예: Ctrl+ L화면 지우기)을 사용합니다. $TERMxterm 또는 linux로 설정한 후에도 SSH가 계속 정지됩니다 Ctrl.P

  6. 다음 --noprofile을 사용하여 BASH를 시작해 보았지만 +가 여전히 작동하지 않습니다.--nobashrcCtrlP

  7. 서버에 연결되어 있지만 -vvv로그 메시지에서 이상한 점을 발견하지 못했습니다

  8. SSH 연결이 정지되면 문제 없이 다른 서브셸의 동일한 서버에 연결할 수 있습니다. 이 작업을 수행한 후 이전 서브셸에서 정지되었던 세션이 다시 정상이 되었습니다. 내가 입력한 내용을 볼 수 있지만 세션이 정지된 동안 입력한 내용이 모두 표시되지는 않습니다.

  9. 로컬 문제를 해결하기 위해 여러 컴퓨터에서 이 서버에 연결했지만 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가 표시되어야 합니다. (무엇을 "중지"해야 합니까?)

클라이언트가 충돌한 후:

  1. 이와 같은 명령을 실행하면 touch /tmp/foo서버에 영향을 미치나요? (즉, 정지를 표시하거나 실행합니다.)
  2. SSH 클라이언트 이스케이프를 실행할 수 있나요? <enter>~? "지원되는 이스케이프 시퀀스" 목록을 입력하고 얻을 수 있습니까 ? <enter>~.연결을 입력하고 종료할 수 있습니까 ? 그렇다면 모든 동결은 확실히 서버에 있습니다.

strace를 사용하여 서버 측에서 수행 중인 작업에 대해 더 나은 아이디어를 얻을 수 있습니다.

strace -fo /tmp/strace.out sshd -ddd -D

관련 정보