실행하는 데 시간이 오래 걸리고 지속적인 연결이 필요한 일부 명령을 실행하기 위한 스크립트를 만들려고 하는데,
autossh user@server
wait $! #or wait ${!}
commandA
commandB
작동하지 않습니다 ( autossh
백그라운드로 들어가기 때문에 가정합니다). GUI가 팝업되어 비밀번호를 묻고 다음 몇 가지 명령을 실행합니다.
다음 명령을 실행하기 전에 연결이 설정될 때까지 어떻게 기다릴 수 있습니까?
고쳐 쓰다:
autossh -f => "...ssh를 실행하기 전에 autossh가 백그라운드로 떨어지게 합니다..."
따라서 -f wait를 사용하면 아무 작업도 수행되지 않습니다. 이를 사용하지 않으면 결코 끝나지 않는 ssh를 기다리게 됩니다...
답변1
내가 올바르게 이해했다면 귀하의 문제는 나머지 스크립트를 계속하기 전에 인증이 성공할 때까지 기다리려는 것입니다.
이 문제는 내가 해결해줄게공개 키 인증 및 ssh-agent.
일단 구성되고 ssh-agent가 실행되면 ssh는 비밀번호를 묻지 않으며 스크립트는 매번 올바르게 인증됩니다. (이것은 연결이 작동하는지 확인하는 것과 완전히 동일하지는 않지만 목적에 충분할 수 있습니다.)
나는 두 가지 다른 해결책을 생각했습니다.
- while 루프에서 tcptraceroute를 사용하여 포트 전달이 제대로 작동하는지 확인합니다(포트 전달을 사용 중이거나 이 목적을 위해 포트 전달을 만들 수 있다고 가정). 성공적인 응답을 받을 때까지 루프에서 벗어나지 마십시오.
- 원격 측의 스크립트에 장기 실행 명령을 배치하고 screen 또는 nohup에서 실행합니다. 내가 과거에 사용한 한 가지 방법은 스크립트를 생성하고 이를 원격 측에 복사한 다음 nohup을 사용하여 실행하는 것입니다.