화면과 SSH를 효과적으로 사용하는 방법?


12

로그인이 항상 화면 세션에 다시 연결되도록 SSH 및 화면을 구성하고 싶습니다. 이상적으로는 Cd를 누르면 세션이 종료되지 않고 분리됩니다. 이것이 어떻게 달성 될 수 있습니까? SSH 수명을보다 쉽게하기 위해 어떤 유용한 설정이 있습니까?

답변:


9

SSH를 통해 연결할 때 자동으로 스크린 세션에 들어가도록 모든 서버에서 다음을 수행했습니다.

사용자 계정의 ~ / .bashrc에 다음을 추가하십시오.

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

main이라는 스크린 세션이 존재하지 않으면 시작되거나 다시 연결됩니다. 이것은 다양한 서비스를 위해 분리 된 다른 여러 세션이 있고 연결하고 싶지 않기 때문에 수행되었습니다.


CTRL-d 키 조합이 실행중인 화면 세션에서 분리하기 위해 화면의 표준임을 추가하고 싶었습니다.
혼돈의 데몬

8

원격 서버의 .bash_profile에 다음이 있습니다.

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

이것은 두 가지 작업을 수행합니다. 먼저, 셸을 교체하고 ssh-agent 연결을 전달하는 셸 기능을 설정하고, 두 번째로 몇 초 동안 일시 정지 한 후 (화면을 시작하지 않으려는 경우) 기능을 호출합니다.

if아직 실행 중이 아닌 화면 ( -z "${STY}")이 터미널 ( -t 0)에 연결되어 있고 sudo를 실행하지 않는 경우 (때로는 변경되지 않는 경우) 첫 번째 절이 적용됩니다 $USER.

reattach기능은 먼저 ssh-agent 포트가 활성화 된 상태에서 ssh가 호출되었는지 확인합니다 ( -n "${SSH_AUTH_SOCK}"). 그런 다음 ~/.ssh/agent-script현재 활성화 된 소켓 파일을 사용하여 환경 변수 ( $SSH_AUTH_SOCK)를 새 값으로 바꿉니다. 그런 다음 스크립트는 현재 쉘을 단일 screen세션으로 바꿉니다 (하나만 존재해야 함). 함수에 대한 모든 인수 reattach는 명령 ( ${1:+"$@"})으로 전달됩니다 .

마지막 부분은 먼저 사용 불능 세션 ( screen -wipe)을 제거 하고 사용자 (me)에게 화면이 곧 시작될 것임을 알리고 대신 Ctrl- 을 눌러 쉘로 돌아갈 수 있습니다 C. 그런 다음 5 초 동안 기다렸다가 reattach함수를 호출합니다 .


4

먼저 byobu를 사용하는 경우 항상 byobu를 자동으로 시작하도록 새 셸 세션을 구성 할 수 있습니다 (최신 화면에서는 tmux를 백엔드로 사용할 수 있지만 기본적으로 멋진 화면 구성입니다). byobu를 정말로 원하지 않는다면, .profile또는 다른 쉘 구성 스크립트를 exec screenif 로 편집하여 화면을 수동으로 연결하도록 설정할 수 있습니다 TERM != "screen".

마음에 들지 않으면 authorized_keys파일을 사용하여 특정 키와의 연결을위한 특정 명령을 실행할 수 있습니다 (원하는만큼의 키를 가질 수 있음). 자세한 내용 man sshd을 참조하십시오. 화면이 실행 중이고 연결되어 있는지 확인하거나 새 세션을 시작하는 스크립트를 명령으로 실행하도록 제안합니다.

Ctrl-D의 연결 해제와 관련하여 화면에서의 키 매핑을 설정할 수 있습니다 .screenrc. 자세한 내용 man screen을 참조하십시오. "bindkey"를 찾고 있습니다.


2

아마도 귀하의 질문과 전혀 관련이 없지만 TMUX 사용을 고려한 적이 있습니다. 그것은 당신이 즉시 찾고있는 많은 기능을 수행합니다.

예 : TMUX에있을 때 SSH 세션에서 연결을 끊는 경우 "tmux a"를 ssh back하고 실행하여 세션에 연결하기 만하면됩니다. TMUX를 사용하기 시작한 이래로 nohup / disown 명령이 무엇인지 잊었습니다. 무언가를 실행하고 로그 아웃해야하는 경우 tmux 내에서 실행하고 분리하십시오. 명령 출력이 버퍼링되므로 나중에 검토 할 수 있습니다.

자동으로 첨부하려면 .bashrc에 다음과 같은 것을 추가 할 수 있습니다.

[ -z $TMUX ] && tmux list-sessions 2>/dev/null && tmux a

또는 더 쉬운

tmux a 2>/dev/null

메모리 사용량이 적고 전체 IMHO 옵션이 훨씬 우수합니다.

meta-d 단축키는 TMUX에서 분리하기위한 기본 맵핑입니다.


0

screen -dAr default || screen -AS default나를 위해 작동합니다. ~ / .bashrc에 추가합니다 .

스위치를 간단히 설명하십시오.

  • d -다른 세션에서 화면이 여전히 연결되어 있으면 분리하십시오.
  • A -화면의 창을 새로운 터미널 크기에 맞 춥니 다.
  • r default -기본이라는 화면에 연결하십시오.

첫 번째 화면 명령 (이전의 명령 ||)이 성공하지 못하면 두 번째 화면 명령 이 실행됩니다.

  • A -위에서 설명한대로 ...
  • S default-이름이 default 인 새 화면 세션을 만듭니다 .

0

byobu를 사용하는 것이 좋습니다 . 이 도구는 tmux를 사용하며 멋진 도구 모음 및 기타 편리한 창 전환 기능, 단축키 등을 제공합니다.

echo "new-session" >> ~/.byobu/.tmux.conf
echo "if [ -n '\$TMUX' ]; then :; else byobu attach; fi" >> ~/.bashrc

SSH 로그인에 성공한 후 위의 명령을 사용하면 시스템이 시도하여 기존 byobu-tmux 세션에 연결하여 새 세션을 만듭니다.

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