ssh가 잠길 때 어떻게 벗어날 수 있습니까?


380

학교에서 집에있는 상자에 자주 ssh를 넣지 만 수업을 바꾸고 컴퓨터를 사용하지 않으면 파이프가 끊어집니다. 그러나 ssh는 단순히- Ctrl+ c, Ctrl+ zCtrl+ 를 잠그지 d않습니다.

터미널을 다시 시작해야하는 것은 성가 시며 새 화면 창을 닫았다가 다시 만들어야하는 것은 더욱 성가신 일입니다.

내 질문에, ssh를 올바르게 죽일 수있는 쉬운 방법이 있습니까 (즉, 파이프가 "정상적으로 실패"하면 파이프가 파손되었다는 메시지와 함께 종료됩니다)? 아니면 PID가 무엇인지 파악하고 수동으로 죽여야합니까?


활성 SSH 세션과 연결이 끊어지면 정지됩니다. 난 그냥 죽이고 새로운 세션을 시작합니다. GNU 화면을 사용하기 때문에 정보가 손실되지 않습니다.
Lekensteyn

나도-화면이 최고입니다. 그러나 그것은 여전히 ​​성가시다 screen -x: P
Wayne Werner

[mosh] (mosh.mit.edu)는이 문제를 피하기위한 깔끔한 대안입니다. 인터넷이 간헐적으로 연결되어 있어도 "연결 상태를 유지합니다".
jaynp

@jaynp mosh (2 분 전부터)를 사용하는 단점은 연결을 끊는 방법을 모른다는 것입니다. 원격 호스트에서 IRC 경비원과 같은 tmux + irssi 세션을 사용하고 있으며 (tmux + irssi를 실행하는 동안) 가끔 연결을 끊고 싶습니다. <enter> + ~ +로 수행했습니다. SSH를 사용하지만 mosh를 사용하면 작동하지 않습니다.
Pavel Šimerda

답변:


534

일반 키는 ssh세션을 통해 전달 되므로 아무 것도 작동하지 않습니다. 대신 이스케이프 시퀀스를 사용하십시오. 현재 세션이 연속적으로 히트 죽일 Enter ↵, ~, ..

이러한 이스케이프 시퀀스의 이상이 함께 나열 할 수있다 Enter ↵, ~, ?:

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

를 눌러 이스케이프 시퀀스 목록을 닫을 수 있습니다 enter.

적중 ~~은 인터셉트 ssh하는 ~대신 전송 하기 때문에 N 번 적중 하면 N 개의 중첩 된 ssh연결을 처리 할 수 ​​있습니다 . (이는 . 바로 뒤에 오는 에만 적용됩니다 .) 즉 , 세션을 5 층 깊게 종료 하고 다른 4 개는 그대로 유지합니다.~ ~enterenter~~~~~.ssh


48
키보드 레이아웃의 경우 ~A는 죽은 키 , 키 순서입니다 Enter ~ Space ..
Søren Løvborg

1
나는 한 추가 더 유용 할 수 있습니다 이스케이프 시퀀스의. :)
gertvdijk

5
당신이 라인의 주석을 해제 할 필요가 있습니다 EscapeChar ~에서을 /etc/ssh/ssh_config(또는 ~/.ssh/ssh_config당신이 선호하는 경우).
Aditya MP

6
@Hitechcomputergeek SSH 세션을 통해 리터럴 을 전송 Enter ~ ~ .하므로 두 번째 SSH 세션은 단일 물결표로 수신 하고 이스케이프의 일부로 해석합니다 . 5 번째 중첩 ssh 세션으로 보내려면 이스케이프 시퀀스에 5 개의 물결표를 사용하십시오. ~ ~~.
Score_Under

4
삶의 변화;)
artm

54

또한 연결 문제 로 인해 SSH가 작동 하지 않도록 SSH에 대한 응용 프로그램 수준 연결 유지 를 설정할 수도 있습니다 . 내 내용은 다음과 같습니다.~/.ssh/config

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

이것은 ssh 클라이언트가 15 초마다 응용 프로그램 수준의 연결 유지를 전송하게합니다. 이 중 세 개가 연속적으로 실패 할 때마다 (기본값은 ServerAliveCountMax) 클라이언트는 연결을 중단 된 것으로 간주하고 닫습니다.

다른 옵션 TCPKeepAlive과 달리 이것은 암호화 된 채널 내에서 확인되며 스푸핑 할 수 없습니다.


사람들이 연결 유지는 것 또한 음에 도움이 언급되고, 계속 오랫동안 공회전 즉, 살아 연결을 당신이 가진 것을 방지 반 폐쇄 의 손길이 닿지 않은 시간 동안 매달려 TCP 세션을.

이 기능을 정기적으로 실행하는 경우이 기능을 사용하는 것이 좋습니다. 그러나 이로 인해 발생할 수있는 약간의 보안 위험에 대해서도 알아야합니다. 알려진 일반 텍스트 공격은 공격자가 간격을 알고 유휴 연결의 내용을 경우 쉽게 될 수 있습니다. 이것이 기본적으로 사용되지 않는 이유 일 수 있습니다.


3
보안 이유. 당신은 술을 마시고 ssh sessio를 열어두고 지난 20 년 동안 함께 일한 실험실 파트너가 세션을 사용하여 서버를 도용하여 서버를 파괴 할 수 있습니다 ... 10 분의 휴식 시간에 술을 마시는 동안.
Luis Alvarado

2
@CYREX, 응? 그리고 기본 옵션으로 어떻게 해제하면 불공정 실험실 파트너가 생기지 못하게 할 수 있습니까? %)
ulidtko

1
@ulidtko : ServerAliveInterval끊어진 연결이 즉시 감지되도록 1로 설정하지 않은 이유 가 있습니까?
krlmlr

2
@gertvdijk : 감사합니다. 나를 위해, 그것은 Host선 없이도 작동 합니다. 또한 "고급 암호화 표준과 같은 현대 암호는 현재 알려진 일반 텍스트 공격에 취약하지 않습니다." (추가 한 링크에서) ...
krlmlr

2
SSH를 Mosh (모바일 쉘)로 교체 할 수도 있습니다. Mosh는 SSH를 통해 서버에 연결 한 다음 연결 문제에 대해 탄력적 인 UDP 기반 채널을 설정합니다. Mosh에는 로컬 에코도 있으므로 서버가 응답하지 않더라도 입력 한 내용을 볼 수 있습니다. 키 입력이 전달되면 Mosh는 에코 된 텍스트를 표시합니다. mosh.mit.edu
파스칼 로진

41

geekosaur의 답변에서 언급했듯이 이스케이프 시퀀스 ~.는 연결을 종료합니다.

이스케이프 시퀀스의 전체 목록과 수행 순서는 다음을 입력하여 표시 할 수 있습니다 ~?.

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

이스케이프 시퀀스 목록을 닫으려면 어떻게합니까?
kristianp

3
이스케이프 시퀀스 목록을 인쇄 한 후 다음 목록을 수락 할 수 없습니다.
Tejas Kale
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.