특정 '스크린'세션으로 SSH 연결 자동 재 연결


10

나는 일반적으로 ssh를 통해 원격 서버에 연결된 여러 터미널 창을 가지고 있습니다. 각 창에서 나는 gnu 스크린 프로그램을 사용하여 연결이 끊긴 경우 대화 형 프로세스의 지속성을 보장합니다.

현재 ssh 연결이 끊어 질 때마다 (예 : 클라이언트 컴퓨터를 밤새 잠자 게 할 때) 각 창에서 ssh 세션을 수동으로 조심스럽게 다시 시작한 다음 각 창에서 특정 화면 세션을 신중하게 다시 시작해야합니다 (예 : "screen- 한 창에 r 3453 ", 다른 창에"screen -r 3462 "등)

이것을 자동화하는 우아한 방법이 있습니까? 구체적으로 특별히:

  • 인터넷 연결이 감지되는 즉시 ssh 세션이 끊어지면 다시 연결하십시오.

  • ssh가 다시 연결되는 즉시 터미널 창의 특정 화면 인스턴스를 실행하십시오.

이것에 대한 팁 주셔서 감사합니다

답변:


10

다음 ssh -t hostname screen -r 3453을 실행 하여 다시 연결할 수 있습니다 . 루프에서 수행하려면 스크립트에서 다음을 사용하십시오.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

이것은 ssh-keys 설정이있는 경우에 가장 잘 작동하므로 암호를 입력하지 않고 로그인 할 수 있습니다. 또한보다 현대적인 화면 구현 인 tmux를 살펴 보는 것이 좋습니다. 실제로 위의 스크립트를 화면과 함께 사용합니다. 예제에서와 같이 pid를 사용하는 대신 명명 된 화면 세션을 사용하고 싶을 수도 있습니다.


감사! "-o BatchMode = yes"는 정확히 무엇입니까?
GJ.

암호를 묻지 않아도됩니다. 'man ssh_config'에서 : "암호 / 암호 쿼리는 비활성화됩니다.이 옵션은 암호를 제공 할 사용자가없는 스크립트 및 기타 배치 작업에서 유용합니다." ssh 키가 이미 설정되어있는 경우에만 사용하십시오.
Jason Axelson

5

bash 루프를 해킹 할 필요가 없습니다. autossh 를 조사해야합니다 . 나는 훨씬에게 자신을 사용하지 않은, 그러나 나의 이해는 단순히 교체하는 것이 있습니다 sshautossh명령에.

편집 : 실제로 autossh에는 rscreen정확히이 목적을 위해 설계된 것으로 보이는 스크립트 가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.