오작동하는 SSH 서버에 연결할 때 짧은 시간 내에 대화형 콘솔에 도달하지 못할 경우 클라이언트에게 더 일찍 포기하도록 지시하는 데 사용할 수 있는 플래그 또는 구성 설정이 있습니까?
-o ConnectTimeout
호스트에 연결할 수 없을 때 연결이 중단된다는 것을 알고 있습니다 . 이 경우 호스트에 도달할 수 있고 초기 연결이 빠르게 발생하지만(1초 이내에 "서버가 키를 승인함") PAM의 일부 계층이 손상되어 실제 명령 프롬프트가 3초, 12초 또는 1초 이내에 표시될 수 있습니다. 절대. Ctrl+C를 보내거나 "[호스트] 포트 22에 대한 연결 시간이 초과되었습니다"라는 메시지가 나타날 때까지 90초 동안 기다릴 때까지 연결이 중단됩니다.
근본 원인이 해결될 때까지(이 질문으로 해결하려는 것이 아님) 증상을 완화하기 위해 할 수 있는 일이 있습니까? 5초 내에 유용한 메시지가 표시되지 않으면 자동으로 연결을 끊고 싶습니다.
답변1
기본 연결이 안정적이고 주요 목표가 PAM 룰렛을 플레이하지 않고 여러 세션을 여는 것이라면 "마스터" 모드가 도움이 될 수 있습니다.
ssh -M -S /tmp/reusable.sock user@host
Ctrl+C/90초 제한 시간 싸움에서 처음으로 승리하면 다음을 사용하여 다른 터미널을 빠르게 열 수 있습니다.
ssh -S /tmp/reusable.sock user@host
이는 원래 연결이 열려 있는 한 작동합니다. 연결 시간 단축은 문제가 인증 단계에 있다고 가정합니다(이와 같이 소켓을 다중화하면 재인증을 우회하므로).
답변2
포트 전달이 설정되기 전에 연결이 중단되면 소켓을 세마포로 활용하고 자체 감시 기능을 해킹할 수 있습니다.
lfg.sh:
#!/bin/bash
set -m
function watchdog {
sleep $1
if [[ ! -S "/tmp/lfg.$2" ]]; then
kill -STOP $3
fi
}
ssh -L /tmp/lfg.$$:localhost:1234 $1 && rm -f /tmp/lfg.$$ &
watchdog $2 $$ $! &
fg %-
용법:
lfg grumpy-host 5
lfg
먼저 작업 제어를 활성화한 다음 임의의 원격 포트로 전달되는 ssh
로컬 소켓 요청을 시작합니다. /tmp/lfg.nnn
이 작업을 백그라운드에 두고 감시 기능에 5초 동안 기다린 다음 소켓을 찾도록 요청합니다. 거기에 없으면 정지된 SSH 프로세스를 종료하십시오. fg %-
ssh를 다시 전경에 놓아 대화형이 되자마자 시작됩니다. 5초 이상 걸리면 로컬 프롬프트로 돌아갑니다.