사용 가능한 모든 메모리를 천천히 소모하는 OpenSSH 서버의 이상한 동작

사용 가능한 모든 메모리를 천천히 소모하는 OpenSSH 서버의 이상한 동작

클라이언트가 서버에 터널링하고 데이터베이스에 연결할 수 있도록 pgbouncer 서버와 Open SSH 서버를 실행하는 컴퓨터가 있습니다.

이제 모든 클라이언트는 약 3분 동안 연결을 유지한 다음 연결이 닫힙니다. 보시다시피 아래 이미지는 실행 명령을 보여줍니다.

ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc

단시간에 sshd 프로세스 수가 감소한다는 사실은 여러 번 강조되어 왔습니다.

 sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    158     158     790
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    150     150     750
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    146     146     730
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    140     140     700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    140     140     700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    140     140     700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    140     140     700
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    136     136     680
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    132     132     660
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    132     132     660
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    132     132     660
sosepe@pgbouncer:~$ netstat -nt | grep :22
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    298     298    1490
sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    324     324    1620

그러나 오랫동안은 아닙니다.

즉, 몇 시간 후에 명령을 다시 실행하면 실제로 프로세스 수가 증가한 것을 알 수 있습니다. 그 중 일부는 실제로 닫히지 않기 때문입니다.

sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
    324     324    1620

몇 시간 후 결과는 다음과 같습니다.

sosepe@pgbouncer:~$ ps -o pid,user,%mem,command ax | sort -b -k3 -r | grep -o sshd | wc
   1926    1926    9630

결과는 다음과 같습니다.

 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  22.0 KiB =  26.0 KiB   agetty
132.0 KiB +  27.5 KiB = 159.5 KiB   vnstatd
128.0 KiB +  45.5 KiB = 173.5 KiB   systemd-udevd
136.0 KiB +  65.0 KiB = 201.0 KiB   cron
216.0 KiB +  33.0 KiB = 249.0 KiB   tail
112.0 KiB + 239.5 KiB = 351.5 KiB   systemd-timesyncd
504.0 KiB +  50.0 KiB = 554.0 KiB   lvmetad
192.0 KiB + 481.5 KiB = 673.5 KiB   vsftpd
908.0 KiB +  92.0 KiB =   1.0 MiB   sudo
916.0 KiB + 103.0 KiB =   1.0 MiB   pgbouncer
644.0 KiB + 604.0 KiB =   1.2 MiB   vmtoolsd
  1.3 MiB +  47.0 KiB =   1.3 MiB   rsyslogd
  1.2 MiB + 247.0 KiB =   1.5 MiB   CloudEndure_Age (4)
  1.4 MiB +  81.0 KiB =   1.5 MiB   dbus-daemon
  1.6 MiB + 331.0 KiB =   1.9 MiB   su (4)
  1.2 MiB + 892.0 KiB =   2.1 MiB   VGAuthService
  1.7 MiB + 582.0 KiB =   2.2 MiB   collectd
  2.7 MiB + 268.0 KiB =   3.0 MiB   systemd-logind
  2.9 MiB +  63.5 KiB =   3.0 MiB   bash
  4.3 MiB + 231.5 KiB =   4.5 MiB   systemd-journald
  2.7 MiB +   3.6 MiB =   6.2 MiB   php-fpm7.3 (3)
  4.8 MiB +   1.8 MiB =   6.6 MiB   (sd-pam) (3)
  6.5 MiB +   3.3 MiB =   9.8 MiB   systemd (4)
  5.8 MiB +   4.1 MiB =   9.9 MiB   php-fpm7.2 (3)
  5.7 MiB +   6.5 MiB =  12.2 MiB   php-fpm5.6 (3)
 16.1 MiB + 153.0 KiB =  16.3 MiB   run_linux_migration_scripts_periodically (2)
 17.2 MiB + 166.5 KiB =  17.3 MiB   update_onprem_volumes (2)
 18.5 MiB + 145.5 KiB =  18.6 MiB   tailer (2)
 11.8 MiB +  13.1 MiB =  24.9 MiB   apache2 (11)
159.3 MiB + 180.0 KiB = 159.5 MiB   java
741.6 MiB +   2.1 GiB =   2.8 GiB   sshd (4469)
---------------------------------
                          3.1 GiB
=================================

SSHD는 거의 3GB의 메모리를 소비하며 이는 머신이 재부팅될 때까지 계속됩니다.

문제가 어디에 있는지에 대한 단서가 있습니까?

감사해요!

폴리스티렌

이것은 conf 파일입니다:

Port 10110

Protocol 1,2

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes

SyslogFacility AUTHPRIV
LogLevel INFO

PermitRootLogin no
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes

MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

[email protected],diffie-hellman-group-exchange-sha256,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
KexAlgorithms [email protected],diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521

PermitEmptyPasswords no
PasswordAuthentication yes

ChallengeResponseAuthentication no

UsePAM yes

GatewayPorts yes

ClientAliveInterval 600

PermitTunnel yes

MaxSessions 50

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

Subsystem   sftp    /usr/libexec/openssh/sftp-server

답변1

Oracle Linux 및 Oracle Database를 실행하는 서버에서 동일한 동작을 수행하면서 sshd 서비스가 메모리가 부족하여 서버를 다시 시작해야 할 때까지 모든 메모리를 소비하고 있음을 확인했습니다. 우리는 이것이 Linux용 CIS 벤치마크를 구현했을 때만 시작된 것으로 의심합니다. 우리 시나리오에서는 Oracle 데이터베이스 인스턴스를 시작하면 sshd 서비스가 메모리를 사용하기 시작합니다. 현재 근본 원인이 발견될 때까지 sshd 서비스를 비활성화했습니다. 인증을 위해 PAM을 비활성화하려고 최선을 다했지만 소용이 없었습니다. 누군가가 이 문제의 원인을 찾길 바랍니다.

관련 정보