UFO ET IT

네트워크 중단 후 자동으로 (또는 더 쉽게) 화면 세션에 다시 연결

ufoet 2021. 1. 8. 20:58
반응형

네트워크 중단 후 자동으로 (또는 더 쉽게) 화면 세션에 다시 연결


ADDED :이 질문은 이제이 질문에 포함됩니다. GNU Screen을 완전히 투명하고 자동으로 사용

이 관련 질문도 참조하십시오 :
https://superuser.com/questions/147873/ssh-sessions-in-xterms-freeze-for-many-minutes-whenever-they-disconnect

원래 질문 :

머신에 ssh하고 즉시 특정 화면 세션에 다시 연결하는 방법이 있다면 좋을 것입니다. 다음과 같이 할 수 있습니다.

laptop> ssh server.com screen -ls

다음과 같이 server.com에서 사용할 수있는 화면 목록이 표시됩니다. [1] :

123.pts-1
456.pts-2

그런 다음 이렇게 시도 할 수 있습니다.

laptop> ssh server.com screen -dr pts-2

하지만 "단말기에 연결되어야합니다."라는 말은 실패합니다. 먼저 ssh를 입력 한 다음 server.com에서 "screen -dr pts-2"를 수행해야합니다. 연결이 불안정하고 연결이 많이 끊어지면 좋지 않습니다. 랩톱에서 간단한 "위쪽 화살표 입력"으로 다시 시작할 수 있기를 원합니다. (또는 더 자동으로 만들 수도 있습니다.)

나는이 문제에 대한 어리석은 해결책을 가지고 있으며 대답으로 게시 할 것이며 이것을 처리하는 올바른 방법에 찬성하여 망각에 찬성하기를 바랍니다.


각주 :

[1] 또는 " screen -S foo"및 " screen -S bar" 같은 이름으로 스크린 세션을 생성 한 경우 다음과 같은 친숙한 목록이 표시됩니다.

123.foo
456.bar

예를 들어 " screen -dr foo" 와 (과) 다시 연결할 수 있습니다 .


이 질문에 대한 답을 포함하는 미니 스크린 튜토리얼 :

server.com에 로그인하고

screen -S foo 

그런 다음 해당 세션에서 다시는 로그 아웃하지 마십시오. 다른 곳에서 다시 연결하려면

ssh -t server.com screen -dr foo

다시 연결할 사용 가능한 화면을 나열하려면 :

screen -ls

또는 물론

ssh server.com screen -ls

server.com의 사용 가능한 화면을 원격으로 확인합니다.

이제 아래 Jason의 대답에 따라 다음 별칭 (tcsh)을 사용하여 명명 된 화면이있는 경우 연결하거나 그렇지 않은 경우 만들고 연결합니다.

alias ssc 'ssh -t \!:1 "screen -S \!:2 -dr || screen -S \!:2"'

-t옵션이 원하는 것을 수행 합니까 ?

     -t 의사 tty 할당을 강제합니다. 이것은 arbi-를 실행하는 데 사용할 수 있습니다.
             원격 컴퓨터에서 화면 기반 프로그램을 검색 할 수 있습니다.
             예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. 다중 -t
             옵션은 ssh에 로컬 tty가없는 경우에도 tty 할당을 강제합니다.

그래서:

laptop> ssh -t server.com screen -dr pts-2

이것은 내 설치에서 작동하는 것 같습니다.


이것은 이제 이것에 포함됩니다 : GNU 화면을 완전히 투명하고 자동으로 사용하기


다음 ssc은 똑같이 작동 ssh하지만 다시 연결할 화면 또는 새 화면의 이름을 지정하기 위해 세 번째 인수를 사용 하는 스크립트 입니다. 이 스크립트는 원래 질문의 모든 것을 포함한다고 생각합니다.

#!/usr/bin/env perl
# Use 'ssc' (this script) instead of 'ssh' to log into a remote machine.
# Without a 3rd argument it will list available screens.
# Give it a 3rd argument to attach to an existing screen or specify a new
#   screen.  Eg, ssc remote.com foo
# The numbers in front of the screen tag can usually be ignored.
# Screen is a little too clever though in that if there's an existing screen "bar"
#   and you say "ssc remote.com b" it will reconnect you to "bar" instead of making
#   a new screen "b".  It's like invisible and silent tab-completion.

if(scalar(@ARGV)==0 || scalar(@ARGV) > 2) {
  print "USAGE: ssc remote.com [screen name]\n";
} elsif (scalar(@ARGV) == 1) {
  $machine = shift;
  @screens = split("\n", `ssh $machine screen -ls`);
  for(@screens) {
    if(/^\s*(\d+)\.(\S+)\s+\(([^\)]*)\)/) {
      ($num, $tag, $status) = ($1, $2, $3);
      if($status =~ /attached/i) { $att{"$num.$tag"} = 1; }
      elsif($status =~ /detached/i) { $att{"$num.$tag"} = 0; }
      else { print "Couldn't parse this: $_\n"; }
    }
  }
  print "ATTACHED screens:\n";
  for(keys(%att)) { print "  $_\n" if $att{$_}; }
  print "DETACHED screens:\n";
  for(keys(%att)) { print "  $_\n" unless $att{$_}; }
} else {
  $machine = shift;
  $tag = shift;
  system("ssh -t $machine \"screen -S $tag -dr || screen -S $tag\"");
}

-t명령을 직접 실행하는 동안 ssh 옵션을 사용하여 터미널을 할당하십시오.

laptop> ssh -t server.com screen -dr pts-2

나는 비슷한 일을 해왔지만 거기에 도달하지는 못했습니다. 당신의 솔루션이 내 문제를 해결했기 때문에 여기에 내 제안이 있습니다.

ssh -t server.com "screen -S foo -rd || screen -S foo"

이것은 foo라는 기존 화면을 열려고 시도하고 존재하지 않으면 생성합니다. 랩톱의 런처에 넣을 것이므로 무선 네트워크가 연결되면 중단 한 부분을 열 수 있습니다.

기본 화면 셸이 약간 약하다는 것을 알았습니다. 따라서 가정 환경을 좀 더 잘 설정하는 개선 사항은 다음과 같습니다.

ssh -t server.com "screen -S foo -rd || screen -S foo bash -l"

I converted this to work on OS X .bash_profile with one addition: If no 2nd parameter is given, it will start a session "default".

function ssc() {
    if [[ -z $2 ]]; then
        screen="default"
    else
        screen=$2
    fi
    ssh -t $1 "screen -S $screen -dr || screen -S $screen"
}

If you like to connect to the same session always even it is active, detached or not exists yet:

ssh -t user@server screen -xR screenName

The same but create a new session if it is already active on some other pty:

ssh -t user@server screen -rR screenName

ReferenceURL : https://stackoverflow.com/questions/474967/automatically-or-more-easily-reconnect-to-a-screen-session-after-network-inter

반응형