연결이 끊긴 ssh 세션에 연결하는 방법이 있습니까? 별도로 작업중인 원격 사이트에 대한 네트워크 연결에 문제가 있습니다. 그러나 그 동안 원격 위치의 서버에 연결되어있는 동안 패킷 손실로 인해 많은 수의 연결이 끊어졌습니다. 여러 번 세션이 활성 상태로 유지되는 경우가 종종 있으며 가능한 경우 다시 시작하지 않고 다시 시작해야하는 작업 (파일 편집, 일부 프로세스 실행 등)의 중간에있을 수 있습니다.
연결이 끊긴 ssh 세션에 연결하는 방법이 있습니까? 별도로 작업중인 원격 사이트에 대한 네트워크 연결에 문제가 있습니다. 그러나 그 동안 원격 위치의 서버에 연결되어있는 동안 패킷 손실로 인해 많은 수의 연결이 끊어졌습니다. 여러 번 세션이 활성 상태로 유지되는 경우가 종종 있으며 가능한 경우 다시 시작하지 않고 다시 시작해야하는 작업 (파일 편집, 일부 프로세스 실행 등)의 중간에있을 수 있습니다.
답변:
업데이트 : 실제 답변은 아래 zero_r의 답변을 참조하십시오
이것은 대답이 아니라 해결 방법입니다. 화면을 사용하십시오 .
처음 로그인하면 화면을 실행하십시오. 다른 쉘을 얻고 그 안에 명령을 실행하십시오. 연결이 끊어지면 화면 프로세스는 터미널을 활성 상태로 유지하여 쉘과 실행중인 프로세스가 넘어지지 않도록합니다. 다시 연결하면 'screen -r'을 실행하여 다시 시작하십시오.
화면을 구성하고 사용하는 데 더 많은 것이 있지만 위의 문제를 해결해야합니다.
screen
우분투 12.x에 이미 설치되어 있다는 것을 알게 되어 기뻤습니다. 이 명령을 시도해도 확실하지 않으면 다시 연결하고 do-release-upgrade 프로세스를 다시 시작했습니다 . sudo screen -D -r
sudo
은 원래 화면 세션이 sudo로 시작된 경우에만 사용해야합니다. 그렇지 않으면 스크린 세션이없는 것처럼 반환됩니다.There is no screen to be detached
screen -r
것이 바로 그 것입니다.
서버 측 sshd.conf에서 ClientAliveInterval (예 : 60) 및 TCPKeepAlive (예 또는 아니요)를 적절한 값으로 설정하십시오.
이렇게하면 몇 분 동안 연결이 끊어 지더라도 세션이 활성 상태로 유지됩니다.
위에서 언급했듯이, GNU Screen 은 갈 길입니다. 원격 상자에 여러 개의 '스크린 창'을 통해 여러 명령을 실행할 수있는 '스크린 세션'을 가질 수 있습니다. 부모 SSH 연결이 끊어지면 분리되어 모든 하위 프로세스가 계속 실행되도록 유지합니다.
' man screen
'는 평소와 같이 친구이며 OS 패키지는 screen
기본적으로 설치되지 않은 경우 ' ' 라고 합니다.
기본 사항은 다음과 같습니다.
원격 호스트에서 화면 세션을 시작하십시오.
$ screen
화면 세션에서 연결을 끊습니다. CTRL-A,d
다시 로그인 한 후 화면 세션에 다시 연결하십시오.
$ screen -d -r
다른 화면 '창'을여십시오 : CTRL-A,c
다음 CTRL-A과 같은 화면 창을 순환합니다 : ,space
이 많은 당신이 화면과 함께 할 수있는 멋진 물건은. 나는 그것을 10 년 이상 사용해 왔으며 여전히 새로운 기능을 찾고 있습니다. 내가 가장 좋아하는 유닉스 유틸리티입니다.
나는 아무도 MOSH 를 언급하지 않았다는 것을 믿을 수 없다 .
Mosh는 SSH 로그인 프로세스에 연결할 수있는 별도의 프로토콜로, 연결 끊기, IP 변경, 높은 대기 시간 등으로 며칠 후에도 세션을 유지합니다. 그것은 설명 할 수있는 것보다 홈페이지에 더 잘 설명되어 있으므로 아래 설명을 복사했습니다. 내 경험과 조언은 안드로이드 모바일에서 사용한다는 것입니다. 여행 및 SSH를 할 때 생명을 구하는 것입니다. 예를 들어 기차에서 모바일과 테 더링 할 때 내 노트북에서도 마찬가지입니다. 소스에서 컴파일하여 최신 버전을 얻는 것이 좋습니다. 우분투 내부의 repo 버전은 최신 버전 (작성 당시)에서 수정 된 몇 가지 성가심을 가지고 있습니다.
모쉬 (모바일 쉘)
로밍을 허용하고 간헐적 인 연결을 지원하며 사용자 키 입력의 지능적인 로컬 에코 및 라인 편집 기능을 제공하는 원격 터미널 응용 프로그램입니다.
Mosh는 SSH를 대체합니다. 특히 Wi-Fi, 셀룰러 및 장거리 링크를 통해 더욱 강력하고 반응이 좋습니다.
Mosh는 무료 소프트웨어이며 GNU / Linux, FreeBSD, Solaris, Mac OS X 및 Android에서 사용할 수 있습니다.
웹 사이트의 기능 :
IP를 변경하십시오. 연결 상태 유지 : 인터넷 연결간에 이동할 때 Mosh가 자동으로 로밍됩니다. 기차에서 Wi-Fi, 호텔에서 이더넷 및 해변에서 LTE를 사용하십시오. 로그인 상태를 유지합니다. 로밍 후 SSH와 Gmail과 같은 웹 앱을 포함한 대부분의 네트워크 프로그램은 연결이 끊어집니다. 모 쉬는 다릅니다.
달콤한 꿈을 꾸십시오 : Mosh를 사용하면 랩톱을 잠자기 상태로 설정하고 나중에 깨울 수 있습니다. 인터넷 연결이 끊어지면 Mosh에서 경고하지만 네트워크 서비스가 다시 연결되면 연결이 다시 시작됩니다.
네트워크 지연 제거 : SSH는 사용자에게 직접 입력하기 전에 서버의 응답을 기다립니다. 그것은 사용자 인터페이스를 크게 만들 수 있습니다. Mosh는 다릅니다. 입력, 삭제 및 줄 편집에 즉각적인 응답을 제공합니다. 이 기능은 적응 적으로 수행되며 emacs 및 vim과 같은 전체 화면 프로그램에서도 작동합니다. 연결이 잘못되면 뛰어난 예측에 밑줄이 표시되므로 오해되지 않습니다.
권한있는 코드가 없습니다. 데몬 없음 : Mosh를 설치하거나 실행하기 위해 수퍼 유저 일 필요는 없습니다. 클라이언트와 서버는 일반 사용자가 실행하는 실행 파일이며 연결 수명 동안 만 지속됩니다.
동일한 로그인 방법 : Mosh는 네트워크 포트에서 수신 대기하거나 사용자를 인증하지 않습니다. mosh 클라이언트는 SSH를 통해 서버에 로그인하고 사용자는 이전과 동일한 자격 증명 (예 : 비밀번호, 공개 키)을 제공합니다. 그런 다음 Mosh는 mosh 서버를 원격으로 실행하고 UDP를 통해 연결합니다.
터미널 내부에서 실행되지만 더 좋습니다 . Mosh는 ssh와 같은 명령 줄 프로그램입니다. xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen 또는 tmux 내에서 사용할 수 있습니다. 그러나 mosh는 처음부터 설계되었으며 UTF-8이라는 하나의 문자 세트 만 지원합니다. 다른 터미널과 SSH의 유니 코드 버그를 수정합니다.
Control-C는 훌륭하게 작동합니다 . SSH와 달리 mosh의 UDP 기반 프로토콜은 패킷 손실을 정상적으로 처리하고 네트워크 조건에 따라 프레임 속도를 설정합니다. Mosh는 네트워크 버퍼를 채우지 않으므로 Control-C는
항상 런 어웨이 프로세스를 중지합니다.
autossh 는 연결을 감시하고 연결이 끊어지면 다시 연결됩니다. Keepalives보다 더 안정적입니다. 스크린 세션에 연결하면 연결을 끊은 곳부터 계속 진행됩니다 ( rscreen
autossh와 함께 제공됨 참조 )
rscreen
이를 위해 autossh가 있습니다.
이것은 고전입니다. 터미널 연결이 끊길 위험이있을 때마다 사용하십시오.
$ tmux
$ sh do_something_that_takes_forever
!! Connection fails so you reconnect once you notice
$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]
$ tmux attach -t 0
그런 식으로, 당신은 다시 작동합니다.
다른 사람들이 지적했듯이 화면은 일반적으로 가장 적합한 솔루션이며 다른 유용한 기능도 많이 추가합니다.
원격 시스템에서 프로파일을 설정하여 로그인시 화면을 자동으로 시작 및 / 또는 다시 연결하여 연결이 끊어 지므로 필요할 때 화면을 시작하지 않아도됩니다.
http://tlug.dnho.net/?q=node/239를 참조하십시오 (또는 약간 다른 방법으로 수행 된 다른 많은 예제는 Google을 검색 하십시오 ).
화면이 아닌 또 다른 솔루션이 있습니다.
퍼티 트레이를 사용하면 그렇게 할 수 있습니다. 정기 또는 퍼티가 아닌 연결 해제 옵션에 다시 연결 옵션이 있습니다
https://puttytray.goeswhere.com/
다른 옵션과 함께 퍼티의 (완전히 오픈 소스) 포크이며 연결 설정으로 이동하고 '연결 실패시 다시 연결 시도'와 '시작시 다시 연결 시도'의 두 가지 옵션이 있습니다.
ssh 세션이 중단되면 화면이 원격 서버에서 셸 세션을 열린 상태로 유지하지만 ssh 연결이 끊어지는 문제에 대해서는 아무 것도하지 않습니다. zero_r에서 알 수 있듯이 ssh 연결을 유지하고 긴 시간 초과를 유지하십시오.
손실 된 패킷의 원인을 추적하여 문제를 일으키는 것이 아니라 문제를 해결하는 대신 수정하는 것이 좋습니다.
때때로 나는 화면을 실행하는 것을 잊어 버렸고 미완성 된 작업을 잃어 버렸습니다. 이 경우 깨진 SSH 세션에 다시 연결할 수 없지만 실행중인 프로그램을 새 터미널로 다시 지정하고 수행중인 작업을 다시 시작할 수 있습니다 reptyr
.
실수로 SSH 세션에서 연결을 끊은 후 가장 먼저 screen
연결이 끊어지지 않도록 먼저 실행 해야합니다. 그런 다음 새 세션 ps aux | grep {The process to be resumed}
에서 PID를 얻기 위해 실행 하십시오. PID를 사용하면 작업을 계속하기 위해 reptyr {PID}
또는 reptyr -T {PID}
(하위 프로세스가있는 경우) 시도 할 수 있습니다.