SSH 데이터 전송을 모니터링하고 데이터가 흐르지 않는 경우 연결을 닫습니다.

SSH 데이터 전송을 모니터링하고 데이터가 흐르지 않는 경우 연결을 닫습니다.

파일 전송 및 수동 저장을 위해 간단한 RHEL 서버가 있고 다른 모든 Linux 클라이언트는 SSH를 통해 연결됩니다.

클라이언트가 데이터에 액세스/저장하려고 할 때마다 서버에 연결되며, nautilus데이터 전송이 중지되더라도 수동으로 제거하거나 클라이언트가 시스템을 종료할 때까지 연결은 유지됩니다.

서버에서 CPU 사용량을 모니터링할 때 대부분의 CPU 사용량은 이러한 설정된 연결로 인해 발생합니다.

[root@server]# top

top - 11:22:13 up  2:36,  6 users,  load average: 2.79, 2.19, 1.90

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
17247 share     20   0 55640 1924  972 S 26.7  0.1   7:36.72 sftp-server                                                                                                                                                                     
17900 share     20   0 55640 1932  972 S 17.5  0.1  10:16.45 sftp-server                                                                                                                                                                     
26152 share     20   0 55596 1872  972 S 17.5  0.1   8:12.04 sftp-server                                                                                                                                                                     
17487 share     20   0 55636 1864  972 R 15.5  0.1   9:58.56 sftp-server                                                                                                                                                                     
 2852 root      20   0  195m  55m 7872 R 13.8  2.7  17:01.72 X                                                                                                                                                                               
11768 share     20   0 55560 1684  832 S  8.9  0.1   3:12.00 sftp-server                                                                                                                                                                     
17486 share     20   0 98172 1884  784 R  8.2  0.1   4:48.35 sshd                                                                                                                                                                            
26151 share     20   0 98236 1872  784 S  7.9  0.1   4:03.29 sshd                                                                                                                                                                            
17899 share     20   0 98204 1916  784 S  7.2  0.1   5:00.17 sshd                                                                                                                                                                            
12569 tejas     20   0  322m  11m 7808 S  5.9  0.6   0:28.12 gnome-system-mo                                                                                                                                                                 
17246 share     20   0 98204 1840  784 S  5.9  0.1   3:33.18 sshd                                                                                                                                                                            
11767 share     20   0 98008 1716  772 S  4.3  0.1   1:28.73 sshd                                                                                                                                                                            
15168 tejas     20   0  989m  64m  18m S  0.7  3.2   0:01.31 chrome                                                                                                                                                                          
 4077 tejas     20   0  109m 9312 5584 S  0.3  0.5  24:26.08 App                                                                                                                                                                             
11360 tejas     20   0  304m  10m 5144 S  0.3  0.5   0:05.23 gnome-terminal                                                                                                                                                                  
14236 root      20   0 15168 1380  928 R  0.3  0.1   0:00.36 top                                                                                                                                                                             
    1 root      20   0 19324 1056  844 S  0.0  0.1   0:00.67 init                                                                                                                                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                                                        

그래서 저는 해당 SSH 연결을 오프로드하는 자동화된 방법(데이터가 흐르지 않는 경우 약 10분 정도)이나 CPU 사용량을 최소화하기 위한 다른 아이디어를 찾고 있습니다.
편집하다:slm의 의견에 따르면 can you explain how they're connecting from Nautilus?
이는 클라이언트가 일반적으로 SSH를 통해 서버에 연결하는 방법입니다.

  • 필수 필드를 입력하고 비밀번호를 입력하세요.

여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

  • 파일을 전송/생성합니다.

여기에 이미지 설명을 입력하세요.

  • 디렉토리를 닫은 후 30분 동안 기다리십시오.
  • 아직 연결이 표시되고 있습니다...

여기에 이미지 설명을 입력하세요.

답변1

방법 #1 - SSHD/SFTPD를 통해 시간 초과 사용

SSH를 통해 연결하는 경우 SSHD 측 구성 파일에서 이러한 설정을 설정할 수 있습니다 /etc/ssh/sshd_config.

ClientAliveInterval 30
ClientAliveCountMax 5

이러한 설정이 적용되는 위치는 다음과 같습니다.

  • ClientAliveInterval: 클라이언트로부터 데이터가 수신되지 않으면 sshd가 암호화된 채널을 통해 메시지를 보내 클라이언트로부터 응답을 요청하는 시간 제한 간격을 초(30)로 설정합니다. 기본값은 0이며, 이는 이러한 메시지가 클라이언트에 전송되지 않음을 의미합니다. 이 옵션은 프로토콜 버전 2에서만 사용할 수 있습니다.

  • ClientAliveCountMax: sshd가 클라이언트에서 반환된 메시지를 수신하지 않고 보낼 수 있는 클라이언트 활성 메시지 수(5)를 설정합니다. 클라이언트 활동 메시지를 보내는 동안 이 임계값에 도달하면 sshd는 클라이언트 연결을 끊고 세션을 종료합니다.

10분을 얻으려면 그에 따라 시간을 조정해야 합니다. 예를 들면 다음과 같습니다.

ClientAliveInterval 120
ClientAliveCountMax 5

방법 #2 - 칼을 사용하세요

위의 방법이 작동하지 않으면 클라이언트가 연결 유지를 활용하여 트래픽이 적은 연결을 인위적으로 지원하고 있을 가능성이 있습니다. 이러한 경우 유휴 연결을 끊으려면 어떻게 해야 합니까?

한 가지 접근 방식은 특정 기간(예: 시나리오에서 10분) 동안 유휴 상태인 연결을 모니터링하는 cronjob을 개발하는 것입니다.

cutter이 스크립트가 이러한 연결 중 하나를 감지하면 클라이언트의 의지에 반하여 클라이언트에 연결을 끊으라고 지시하는 등의 명령을 사용할 수 있습니다 .

$ cutter <ip> <port>

$ cutter 192.168.1.20 22

노트:Cutter는 대부분의 주요 배포판의 저장소에 있어야 합니다. Fedora/CentOS/RHEL은 물론 Debian/Ubuntu에도 이 방법으로 설치할 수 있었습니다.

디버그 연결

@Gilles는 유휴 연결이 실제로 CPU 부하를 유발해서는 안 된다는 Q 아래의 의견에서 좋은 지적을 했습니다. 이러한 모든 sftp-server프로세스가 내가 생각하는 상당한 부하(20~30%)를 유발하고 있다는 사실은 top뭔가 진행되고 있음을 나타내는 것 같습니다.

strace먼저 프로세스 중 하나를 사용 하고 연결하여 sftp-server용도를 확인하겠습니다. 예를 들어 PID 17247에 연결하는 경우:

$ sudo strace -p 17247

실제로 뭔가를 하고 있는지 확인해 보세요. 정말 이러면 안 됩니다. tcpdump또는 wiresharkNautilus 에서 들어오고 나가는 네트워크 트래픽을 모니터링하는 데 사용할 수도 있습니다 sftp-server.

인용하다

관련 정보