2013-11-22 7 views
4

이러한 종류의 질문은 수년간 요청되었으며 그 답변은 종종 screen 또는 tmux입니다. 오랫동안 세션을 나가거나 네트워크가 안정적인 연결을 유지하기에는 너무 나쁨을 알면 처음에는 screen을 사용할 것입니다.화면 또는 tmux없이 실수로 연결 해제 된 ssh 세션에 다시 연결하는 방법

주요 문제는 일부 세션을 시작한 후 오래 지속되어야한다는 것을 발견하거나 실수로 연결이 끊어진 것입니다. 나중에 다른 세션을 즉시 시작하면 종종 이전 프로세스가 종료되지 않았지만 터미널에 다시 연결할 수있는 방법이 없습니다.

그래서 실수로 연결이 끊어진 ssh 세션이 종료 된 후 오랜 시간 동안 정상적인 프로세스가 죽는 것을 방지 할 수 있는지 궁금합니다. 그리고 가장 중요한 것은 내가 단말을 다시 연결하지 않고 screen에 미리 넣고으로 다시 연결할 수 있다는 것입니다.

그렇지 않은 경우 이미 시작된 맨손 ssh 세션을 나중에 다시 연결할 수 있도록 새 screen 세션으로 이동할 수 있습니까?

+0

호기심에서 화면을 불러내시겠습니까? – SpliFF

+1

@SpliFF 일반적으로 원하지 않는 것은 아니지만, 질문 (말하자면 연결이 끊어 지거나 반쪽 세션에서 화면이 필요함)에서 말한 것처럼 너무 늦기 때문입니다. BTW, 화면 또한 쉽게 스크롤 막대를 드래그하여 스크롤을 허용 퍼티와 iterm의 스크롤 백 버퍼를 깰 어쩌면 그것은 조정할 수 있습니까? 그러나 나는 그것을 막기에는 너무 게으 르다. – lyu

답변

1

나는 스크린과 같은 것이 없다면 불가능하다고 생각합니다. 일단 당신의 pseudo-TTY가 없어지면 나는 적어도 다른 쉘에서 복구 될 수 없다는 것을 확신합니다.

기존 프로세스를 새 화면에 추가하는 것이 가능하다고 생각합니다. 여기에 지침을보십시오 : http://monkeypatch.me/blog/move-a-running-process-to-a-new-screen-shell.html

The first thing to do is to suspend the process. In my case, Irssi can be suspended by typing ctrl+z. 

Secondly, resume the process in background: 

$ bg 

Now, we will detach the process from its parent (the shell). So, when the parent process will be terminated, the child (Irssi) will be able to continue. For this, we use the disown builtin: 

$ disown irssi 

Launch a screen session: 

$ screen 

As we are in a screen session, we will retrieve the irssi process. To do so, we use the reptyr command which take a pid: 

$ reptyr <pid> 

To avoid the tedious pid research, we can use the pgrep command: 

$ reptyr $(pgrep irssi) 

Now the process is in a screen shell, we can safely detach our session and no longer worry about killing our X server or close our ssh connection. 

You'l이에 대한 reptyr이 필요합니다.

옵션 2 :

난 당신이 잘못된 문제를 해결하기 위해 시도 할 수있다 생각한다. SSH 연결이 끊어지는 이유는 무엇입니까? 연결 설정을 미세 조정하여 SSH가 시간 초과 및 연결 끊김에 매우 견디도록 설정할 수 있습니다. $HOME/.ssh/config 추가에 클라이언트에서

: 서버가 5 분 동안 응답하지 않는 경우에도

ServerAliveInterval 60 
ServerAliveCountMax 5 

는 이제 세션 시간이 초과되지 않습니다. 대신 TMUX의

+0

나는 옵션 2를 이해하지 못한다. 타임 아웃이 설정 될 수 있다는 것을 알고 있지만 일단 연결이 끊어지면 모든 것이 사라 졌는가? 시간 초과가 inf 인 경우에도 여전히 다시 연결할 수 없습니다. – lyu

+1

옵션 2는 처음에 연결이 끊어지는 것을 최소화하는 방법입니다.4 분 동안 인터넷이 꺼지더라도 위의 옵션을 선택하면 세션이 계속 진행됩니다. 하지만 예, 일단 클라이언트가 재부팅되면 (실수로 닫힌 터미널 등) 일단 사라지면 그 정도입니다. – SpliFF

+0

고맙습니다. 지금 옵션 2가 있습니다. 그러나 옵션 1은 약간의 문제가 있습니다 : – lyu

0

사용 SSH-TMUX는 :

function ssh-tmux(){ 
    if ! command -v autossh &> /dev/null; then echo "Install autossh"; fi 
    autossh -M 0 $* -t 'byobu || {echo "Install byobu-tmux on server..."} && bash' 
} 
0

나는 나노를 사용하여 텍스트 파일에 근무하고 나는 분리되었다. 로그인 한 후 이전 세션의 nano 프로세스가 계속 실행되고 있지만 해당 nano 인스턴스로 전환 할 수 없음을 알았습니다. 그래서 나노 프로세스를 죽인 다음 filename.save라는 파일을 만들었습니다. 첫 번째 세션에서 변경 한 내용이 있습니다.