ssh 로그인시 자동 시작 화면


19

ssh원격 서버에 접속할 때 화면을 자동으로 시작하는 방법에 대해 읽었습니다 . 간단한 one-liner를 추가하여 .bash_profile시작 screen할 때 시작 ssh하고 화면을 분리 할 때 원격 연결을 종료하지 마십시오.

나는에보고 된 exec screen과의 거의 모든 조합 -d, -r, -D그리고 -R내가 필요한 플래그를 알아낼 수 없습니다.

이상적으로 ssh whatever는 새 서버에 입력 하여 서버에 로그인 screen하거나 오래된 화면을 다시 연결할 수 있습니다. 그런 다음 입력 Ctrl ad하거나 해당 서버 Ctrl d의 일반 ssh로그인으로 다시 가져올 수 있습니다 (motd가 표시되는 위치). 거기에서 나는 screen -r내가 원하는 화면으로 돌아갈 수 있거나 Ctrl d다시 로그 아웃 할 수 있습니다.

답변:


19

간단한 screen -R것은 트릭을 수행해야합니다.

이를 확인하기 위해 screen -R원격 서버의 .bash_profile에 추가 하고 로그인하고 화면에서 분리 한 다음 원격 서버의 일반 셸 프롬프트로 돌아갔습니다. .bashrc로도 확인되었습니다. 후속 로그인으로 예상 결과가 나왔습니다 (스크린 세션에 다시 연결).


감사! 나는 주위를 읽고 있었고 exec screen -R이 필요하다는 인상을 받았다. 이 일이 기쁘다
Ronald Dregan

넣어 나쁜 생각 logout이나 exit화면 오른쪽 Ctrl 키 + D에 의해 폐쇄되면 일 SSH 세션이 즉시 종료되는 줄 끝?
Griddo

이것은 나를 위해 작동하지 않았습니다. 세션이 시작될 때마다 라인이 실행되므로 수십 개의 화면을 시작했습니다. 이것이 일어나지 않도록 어떻게 했습니까?
토마스

11

새 창이나 화면 세션을 시작할 때 일부 솔루션에서 40 개의 계단식 화면 세션이 생성되는 문제가있었습니다. 계단식 화면을 제거하고 존재하지 않는 경우 새 세션을 만들 수있었습니다.

if [ -z "$STY" ]; then screen -R; fi

화면 세션에 있는지 여부를 테스트하고 screen -R그렇지 않은 경우 실행 됩니다. 테스트가 없으면 "화면 내부에서 연결 하시겠습니까?" 새 화면 창을 만들 때마다 화면에서 경고.


+1- screen -lsTony가 언급 한 테스트 보다 낫습니다
cwd

10

screen -RR 사용 가능한 첫 번째 세션에 다시 연결하거나 필요한 경우 세션을 만듭니다.


screen -R을 사용하면 여러 세션에서 문제가 발생했기 때문에 정말 유용했습니다.
David V.

고마워요! 발견 된 첫 번째 "분리 된"세션 (있는 경우)에 연결하고 연결된 세션을 무시합니다. 따라서 로그인하여 여러 개의 창을 열 수는 있지만 각 세션이 화면에서 실행되도록 보호해야합니다. 우리의 OPS 사람들은 감사합니다!
Ian McGowan

8

내가 당신의 필요를 이해한다면, 당신은 시도해야합니다 :

if $(screen -ls | grep -q pts); then screen -x; else screen -R; fi

하나의 스크린 세션 만 생성합니다.


나는 다중 창 SSH 클라이언트를 가지고 있다는 것을 인식하고 (또는 때때로 컴퓨터에 직접 로그인하여)이 아이디어를 좋아한다. Bitvise와 같은 것을 사용하고 여러 터미널 창을 열면 매우 유연합니다. 개별 화면 창을 별도의 실제 창으로 바꿀 수 있습니다.
Piku

1
이 모든 것을 "로 대체 할 수 있습니다. screen -xR"연결할 것이 있으면 첨부하고, 그렇지 않으면 새 화면을 만드십시오 "로 해석됩니다.
Piskvor가 건물을 떠

0

여기 약간의 확장이 있습니다.

bashrc에 대한 스크립트는 분리 된 화면 세션이 둘 이상 있는지 확인합니다. 더 많은 것이 있으면 세션 매뉴얼을 선택해야합니다. 분리 된 세션이 있으면이 세션으로 돌아옵니다. 세션을 종료하면 ssh 세션도 닫힙니다.

 #Start Screen
 if [ -z "$STY" ]; then

 value=$( screen -ls |grep '\<pts.*Detached\>' |wc -l )

 if [ $value -gt 1 ]; then

  screen -ls

 else

  screen -R

  echo 5 Sek. bis die SSH Session beendet wird.

  echo Strg + C - um ohne screen weiter zu arbeiten.

  sleep 6

  exit

 fi

fi

0

당신은 당신이 SSH를 통해 연결 화면 세션에 자동으로 연결하려는 경우에 아래의 코드를 추가 .bash_profile하거나 .bashrc원격 시스템에, 그것은 것입니다 :

  • SSH를 통해 연결할 때마다 새 화면 세션을 시작하십시오.
  • 기존의 분리 된 스크린 세션을 항상 최신 세션부터 다시 사용하십시오. 사용 가능한 분리 된 세션이 없으면 새 세션을 시작합니다.
  • 컴퓨터에 여러 SSH 연결을 열면 분리 된 연결 만 재사용하므로 다른 화면 세션이 표시됩니다.
  • 스크립트를 스크립트에 추가하는 경우 루프를 피하십시오. .bashrc

스크립트는 다음과 같습니다.

#!/bin/bash
#
#  Attaches to the first Detached Screen. Otherwise starts a new Screen.

# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
  detached_screens=($(screen -ls | grep pts | grep -v Attached))

  for screen in "${detached_screens[@]}"; do
    if [[ "${screen}" == *".pts"* ]]; then
      IFS='.pts' read -ra split <<< "${screen}"
      for id in "${split[@]}"; do
        first_id="${id}"
        break
      done 
      break
    fi
  done

  screen -R $first_id
fi

추신 : 로컬 터미널에 이것을 사용 && ! -z "${SSH_CLIENT}하려면 첫 번째 줄 에서 제거하십시오 .

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