원격 호스트에서 암호가없는 SSH를 통해 연결하는 스크립트를 실행하고 있습니다. 원격 호스트가 실행하는 데 무한한 시간이 걸리면 해당 ssh 세션에서 나오고 sh 스크립트에서 다른 행을 계속하고 싶습니다. 시간 초과를 설정하고 싶습니다.
그것을하는 방법에 대한 아이디어가 있습니까?
답변
ssh -o ConnectTimeout=10 <hostName>
여기서 10은 초 단위의 시간입니다. 이 시간 초과는 연결 생성에만 적용됩니다.
답변
-o ConnectTimeout
및을 사용하십시오 -o BatchMode=yes -o StrictHostKeyChecking=no
.
ConnectTimeout 은 스크립트가 정지되지 않도록하고 BatchMode 는 호스트가 알 수 없음으로 알려진 것을 방지하고 YES는 known_hosts에 추가하고 StrictHostKeyChecking을 유지합니다. 은 지문을 자동으로 추가합니다.
**** 참고 **** “StrictHostKeyChecking”은 호스트를 신뢰하는 내부 네트워크 전용입니다. SSH 클라이언트의 버전에 따라 “지문을 추가 하시겠습니까?”로 인해 클라이언트가 무기한 중단 될 수 있습니다 (주로 AIX에서 실행되는 이전 버전). 대부분의 최신 버전에서는이 문제가 발생하지 않습니다. 여러 호스트의 지문을 처리해야하는 경우 puppet / ansible / chef / salt / etc와 같은 일종의 구성 관리 도구로 known_hosts 파일을 유지하는 것이 좋습니다.
답변
이 시도:
timeout 5 ssh user@ip
timeout은 ssh 명령 (args 포함)을 실행하고 ssh가 5 초 후에도 반환되지 않으면 SIGTERM을 보냅니다. 시간 초과에 대한 자세한 내용은 다음 문서를 참조하십시오.
http://man7.org/linux/man-pages/man1/timeout.1.html
또는 ssh의 매개 변수를 사용할 수 있습니다.
ssh -o ConnectTimeout=3 user@ip
답변
당신은 또한 플래그와 연결할 수 있습니다
-o ServerAliveInterval = <초>
따라서 SSH 클라이언트는 <secs>
연결을 유지하기 위해 매 초 마다 null 패킷을 서버로 보냅니다 . 리눅스에서 이것은 전역으로 /etc/ssh/ssh_config
또는 사용자별로 설정할 수도 있습니다 ~/.ssh/config
.
답변
timeout
명령이 없는 것을 포함하여 다른 모든 방법이 실패하면 이 셸 스크립트의 개념이 작동합니다.
#!/bin/bash
set -u
ssh $1 "sleep 10 ; uptime" > /tmp/outputfile 2>&1 & PIDssh=$!
Count=0
while test $Count -lt 5 && ps -p $PIDssh > /dev/null
do
echo -n .
sleep 1
Count=$((Count+1))
done
echo ""
if ps -p $PIDssh > /dev/null
then
echo "ssh still running, killing it"
kill -HUP $PIDssh
else
echo "Exited"
fi
답변
글쎄, 당신은 nohup을 사용하여 ‘비 차단 모드’에서 실행중인 모든 것을 실행할 수 있습니다. 따라서 실행, 실행 및 종료 해야하는 것이 있으면 계속 확인할 수 있습니다.
nohup ./my-script-that-take-long-to-finish.sh & ./check-if-previous-script-ran-or-exit.sh
echo "스크립트는 2011 년 2 월 15 일 오전 9시 20 분에 종료되었습니다"> /tmp/done.txt
두 번째 파일에서는 파일이 존재하는지 확인합니다.