로그인이 항상 screen 세션에 다시 연결되도록 SSH와 screen을 구성하고 싶습니다. 이상적으로는 Cd를 누르면 세션이 종료되지 않고 분리됩니다. 이것이 어떻게 달성될 수 있습니까? SSH 생활을 더 쉽게 만들어 줄 수 있는 다른 유용한 설정은 무엇입니까?
답변1
SSH를 통해 연결할 때 자동으로 Screen 세션에 들어갈 수 있도록 모든 서버에 대해 다음을 수행했습니다.
사용자 계정의 ~/.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이 없으면 main이라는 스크린 세션이 시작되고, 존재하면 다시 연결됩니다. 다양한 서비스에 대해 별도로 실행되는 여러 다른 스크린 세션이 있고 해당 세션에 연결하고 싶지 않기 때문에 이렇게 합니다.
답변2
원격 서버의 .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 연결을 계속하는 셸 함수를 설정하고, 둘째, 몇 초 후에 해당 함수를 호출합니다(화면이 표시되는 것을 원하지 않는 경우). 시작).
첫 번째 절 은 screen()이 실행되지 않고 터미널()에 연결되지 않았고 sudo(때때로 변경되지 않음)를 실행하지 않는 경우 if
true가 됩니다 .-z "${STY}"
-t 0
$USER
이 함수는 먼저 ssh를 호출하기 위해 reattach
ssh-agent 포트가 활성화되어 있는지( ) 확인합니다 . -n "${SSH_AUTH_SOCK}"
그런 다음 ~/.ssh/agent-script
모든 항목을 현재 활성 소켓 파일로 바꾸고 $SSH_AUTH_SOCK
환경 변수( )를 새 값으로 바꿉니다. 그러면 스크립트는 screen
현재 쉘을 단일 세션으로 대체합니다(세션이 하나만 존재하는지 확인하십시오). 함수에 대한 모든 인수는 reattach
command( )에 전달됩니다 ${1:+"$@"}
.
마지막 부분은 모든 죽은 세션( )을 삭제하여 사용자(나)에게 화면이 곧 시작되고 - 를 눌러 셸로 돌아갈 screen -wipe
수 있음을 알리는 것으로 시작됩니다 . 그런 다음 5초 동안 기다렸다가 함수를 호출합니다.CtrlCreattach
답변3
첫째, byobu를 사용하는 경우 항상 자동으로 byobu를 시작하도록 새 셸 세션을 구성할 수 있습니다(최신 버전에서는 tmux를 백엔드로 사용할 수 있지만 이는 본질적으로 좋은 화면 구성입니다). byobu를 정말로 원하지 않는다면, .profile
다른 쉘 구성 스크립트를 if 로 편집하여 exec screen
수동으로 연결하도록 화면을 설정할 수 있습니다 TERM != "screen"
.
이것이 마음에 들지 않으면 authorized_keys
파일을 사용하여 특정 명령을 실행하여 특정 키와 연결할 수 있습니다(원하는 만큼의 키를 가질 수 있습니다). man sshd
자세히보다. 화면이 실행 중이고 연결되어 있는지 확인하는 스크립트를 명령으로 실행하도록 하고, 그렇지 않으면 새 세션을 시작하는 것이 좋습니다.
연결을 끊으려면 Ctrl-D를 누르세요. 자세한 내용은 화면을 참조하세요 .screenrc
. man screen
"bindkey"를 찾고 있습니다.
답변4
screen -dAr default || screen -AS default
나를 위해 작동합니다. 내 항목에 추가했습니다.~/.bashrc.
스위치에 대한 간략한 설명:
d
- 화면이 여전히 다른 세션에 연결되어 있는 경우 다른 세션에서 분리하세요.A
- 화면의 창을 새 터미널 크기에 맞게 조정합니다.r default
- Default라는 화면이 붙어있습니다.
첫 번째 화면 명령(이전 명령 ||
)이 실패하면 두 번째 화면 명령을 실행합니다.
A
- 상술 한 바와 같이...S default
- 이름으로 새 스크린 세션 생성기본.