SSH 세션을 활성 상태로 유지 [닫기]


241

ssh -p8520 username@remote_host원격 서버에 로그인 하는 데 사용 합니다.

이슈 :

작업장에있을 때는 항상 연결되어 있고 제대로 작동합니다. 불행히도 집에서 원격 서버에 연결 한 후 10-15 분 안에 터미널이 정지됩니다.

콘솔에 오류 / 시간 초과 보고서가 없지만 커서를 더 이상 이동할 수 없습니다.

w로그인 사용자를 확인하기 위해 입력하면 일부 좀비 로그인 사용자가 있으며 수동으로 죽여야합니다.

이것은 꽤 성가신 일입니다. 누구든지 나를 도울 수 있습니까?


나는 이것도 가지고 있었고, 나는 사용하기 시작했다 screen. 어쩌면 이것은 일종의 시간 초과 문제 일 수 있습니다.
martin

@martin screen은 프로그램을 계속 실행하는 데 도움이됩니다. 불행히도 때때로 나는 원격 서버에서 작업해야합니다 : (
Haifeng Zhang

매개 변수없이 시작하면 셸이 제공됩니다.
martin

당신의 말만 screen입니까? 연결이 끊어진 문제를 해결할 수 있습니까? 아니 screen -S screenName? 나는 항상 함께 화면을 사용 -S하고-r
하이 펭 장

1
아니요, 이것은 문제를 해결하지 못하므로 터미널에서 작업을 잃어 버리는 것만 피하십시오. 당신이 아무것도하지 않으면 여전히 멈출 것입니다. 시작한 곳을 선택할 수 있습니다. 나는을 사용하여 항상 다시 시작할 수있는 터미널을 만들 수 있음을 의미했습니다 screen. 당신은 이미 그것을 알고있는 것 같습니다;)
martin

답변:


450

서버 측에서 실행되는 ssh 데몬 (sshd)은 클라이언트가 침묵 상태가되면 (즉, 정보를 보내지 않으면) 서버 측에서 연결을 닫습니다. 연결이 끊어지지 않도록 ssh 클라이언트가 서버에 수명 신호를 한 번에 보내도록 지시하십시오.

이것에 대한 구성은 파일에 있으며 파일이 $HOME/.ssh/config존재하지 않으면 파일을 작성하십시오 (구성 파일은 세계적으로 읽을 수 없어야 하므로 파일 을 작성한 chmod 600 ~/.ssh/config후에 실행 하십시오). 원격 호스트에 4 분 (240 초)마다 신호를 보내려면 해당 구성 파일에 다음을 입력하십시오.

Host remotehost
    HostName remotehost.com
    ServerAliveInterval 240

모든 호스트에 대해 연결 유지 신호를 보내려면 구성 파일에 다음 내용을 넣으십시오.

Host *
    ServerAliveInterval 240

24
@ user271996, 왜 클라이언트 쪽 설정을 위해 데몬을 재시작해야합니까?
maxschlepzig 2016 년

구성은 사용자가 쓸 수 있어야합니다. 가독성은 문제가되지 않습니다. 사용자 쓰기 만 가능하므로 600을 권한 수준으로 사용하는 것이 좋습니다.
jbruni

1
이 설정 파일이 PC / 리눅스 박스에 있는지 확실하지 않은 경우
zzapper

5
나는 항상 구성 이름에 대해 혼란스러워합니다 : ServerAliveInterval 서버가 사용 하는 동안 클라이언트가 사용 합니다 ClientAliveInterval . 엉망이야
youkaichao

@youkaichao이 혼란은 종종 있습니다. API 디자이너로서 두 가지 방법으로 둘 수있는 이유가 있습니다. 궁극적으로 가장 중요한 것은 선택한 표준을 잘 문서화 한 것입니다.
Cameron Tacklind 1

170

일회성 솔루션을 원했습니다.

ssh -o ServerAliveInterval=60 myname@myhost.com

별명에 저장했습니다.

alias sshprod='ssh -v -o ServerAliveInterval=60 myname@myhost.com'

이제 다음과 같이 연결할 수 있습니다.

me@MyMachine:~$ sshprod

12
멋지지만 정확히 "일회성 솔루션"은 아닙니다. 당신이 한 번 이상 서버에 연결 위하여려고하는 경우에, 왜하지 Host *ServerAliveInterval 240(또는 당신은 단지 그것을 원하는 경우, 호스트 이름을 지정합니다 myname@myhost.com.? 별칭을 설정하면 어떤 방식으로 쉽게 보이지 않는다 rockymonkey555의 대답에로
Lambart

8
또는 ~ / .bashrc에 별명을 만드십시오.alias ssh='ssh -o ServerAliveInterval=60'
Jabba

15
"한 번만 작성하면 안된다"가 아니라 "한 번만 작동"과 같이 "한 번"을 의미합니다.
Jonathan Hartley

1
예, "한 번 사용"을 "단일 사용"으로 읽으면 완벽하게 작동합니다.
philraj

당신은 "한 줄"세트 것을 원하는 경우 ServerAliveInterval60, 좋은입니다. 그러나 사용할 수있을 때 bash 별칭을 사용하는 .ssh/config것은 어리석은 일입니다.
Cameron Tacklind 1

50

궁금한 분들은 @ edward-coast

서버 의 연결 유지를 설정하려면 다음을 추가하십시오 /etc/ssh/sshd_config.

ClientAliveInterval 60
ClientAliveCountMax 2

ClientAliveInterval : 클라이언트로부터 데이터가 수신되지 않으면 sshd (8)는 클라이언트로부터 응답을 요청하기 위해 암호화 된 채널을 통해 메시지를 보내는 시간 초과 간격을 초 단위로 설정합니다.

ClientAliveCountMax : sshd (8)가 클라이언트로부터 메시지를 다시받지 않고 전송 될 수있는 클라이언트 활성 메시지 수 (아래 참조)를 설정합니다. 클라이언트 활성 메시지가 전송되는 동안이 임계 값에 도달하면 sshd가 클라이언트 연결을 끊고 세션을 종료합니다.


ClientAliveInterval과 같은 "매개 변수"가없고 ServerAliveInterval 만 있습니다. 매뉴얼 페이지 "man ssh_config"
dtj

6
클라이언트 설정이 아닌 ssh 데몬을 실행하는 서버 부분에 대해서는 "man sshd_config"를보십시오.
Jeff Davenport

ClientAliveInterval서버에서 클라이언트의 활성 상태를 확인하도록 해야합니까 , 아니면 클라이언트가 ServerAliveInterval반복적으로 서버에 "핑 (ping)"을하도록해야 합니까? 둘 다 말이되지 않는 것 같습니다
qrtLs

1
ClientAliveInterval응답하지 않는 연결이 끊어진 서버에서 서버 연결을 끊으려면 서버를 설정 한 후 발생 빈도와시기를 사용자 정의 할 수 있습니다.
Jeff Davenport


10

다음과 같은 전역 구성을 통해 ssh 연결을 유지할 수 있습니다

/etc/ssh/ssh_config파일에 다음 줄을 추가 하십시오.

ServerAliveInterval 60

클라이언트에만 적용됩니까, 아니면 sshd에서도 작동합니까?
Edward Coast

1
@EdwardCoast 클라이언트 컴퓨터에서 작동합니다. Mac에서 테스트했습니다
minhas23
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.