У меня есть несколько систем, которые полагаются на зеркалирование на уровне приложений на вторичный сервер. Вторичный сервер извлекает данные с помощью серии удаленных команд SSH, выполняемых на первичном. Приложение похоже на черный ящик, и я может не сможет вносить изменения в используемые скрипты.
Моя проблема в том, что вход в / var / log / secure полностью заполнен запросами от пользователя службы, admin
. Эти команды выполняются много раз в секунду и оказывают соответствующее влияние на журналы. Они полагаются на обмен ключами без парольной фразы. Используемая ОС - EL5 и EL6. Пример ниже.
Пример вывода журнала:
Jul 24 19:08:54 Cantaloupe sshd[46367]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46446]: Accepted publickey for admin from 172.30.27.32 port 33526 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46446]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46446]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46475]: Accepted publickey for admin from 172.30.27.32 port 33527 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46475]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46475]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46504]: Accepted publickey for admin from 172.30.27.32 port 33528 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46504]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46504]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46583]: Accepted publickey for admin from 172.30.27.32 port 33529 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46583]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46583]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:54 Cantaloupe sshd[46612]: Accepted publickey for admin from 172.30.27.32 port 33530 ssh2
Jul 24 19:08:54 Cantaloupe sshd[46612]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:54 Cantaloupe sshd[46612]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46641]: Accepted publickey for admin from 172.30.27.32 port 33531 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46641]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46641]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46720]: Accepted publickey for admin from 172.30.27.32 port 33532 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46720]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46720]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46749]: Accepted publickey for admin from 172.30.27.32 port 33533 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46749]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46749]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46778]: Accepted publickey for admin from 172.30.27.32 port 33534 ssh2
Jul 24 19:08:55 Cantaloupe sshd[46778]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Jul 24 19:08:55 Cantaloupe sshd[46778]: pam_unix(sshd:session): session closed for user admin
Jul 24 19:08:55 Cantaloupe sshd[46857]: Accepted publickey for admin from 172.30.27.32 port 33535 ssh2
В частности, отвечая на вопрос о том, можно ли уменьшить накладные расходы на создание большего количества соединений SSH: Да. Вы можете использовать функцию ControlMaster, присутствующую в OpenSSH 5.5. В этом сообщении блога будет более подробная информация: http://puppetlabs.com/blog/speed-up-ssh-by-reusing-connections
Я не уверен, повлияет ли это на количество журналов. Но, в зависимости от того, как написано приложение, эту функцию можно использовать без фактического изменения приложения, просто перенастроив OpenSSH. Предполагая, что он даже использует OpenSSH в качестве клиента или другого клиента с этой поддержкой. Здесь просто недостаточно информации, чтобы сказать наверняка.
Поскольку вы используете rsyslog, у вас есть возможность фильтр сообщения довольно легко. Базовый пример отбрасывания сообщений:
#/etc/rsyslog.cof
# this is original log file including all authpriv messages regarding admin
authpriv.* /var/log/secure.admin
# These rules filter the remote key based logins for admin
:msg, contains, "Accepted publickey for admin from 172.30.27.32" ~
:msg, contains, "session opened for user admin" ~
:msg, contains, "session closed for user admin" ~
authpriv.* /var/log/secure
Тильда ~
- инструкция по удалению сообщений, содержащих предыдущую строку.
Немного более продвинутый и лучший синтаксис (непроверенный):
if $syslogfacility-text == 'authpriv' and
($msg contains 'for user admin' or $msg contains 'publickey for admin from 172.30.27.32')
then /var/log/secure.admin
if $syslogfacility-text == 'authpriv' and not
($msg contains 'for user admin' or $msg contains 'publickey for admin from 172.30.27.32')
then /var/log/secure
Где каждый оператор if занимает одну строку.
Новости об этом ...
Я решил эту проблему в своих системах RHEL / CentOS EL6, включив функцию SSH ControlMaster:
На подключающемся хосте /home/username/.ssh/config
файл:
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
#ControlPersist 600
В ~/.ssh/sockets/
каталог нужно было создать вручную.
В ControlPersist
директива - это функция постоянства, которая не был перенесен на OpenSSH, доступный в EL6. Я бы хотел, чтобы это было так, потому что без него мультиплексные соединения завершаются, как только начальное соединение умирает.
Я обошел это быстрым и грязным Монит скрипт на подключающемся хосте.
check process ssh-control
matching "MNn"
start program = "/usr/bin/ssh -MNn destination" as uid username
stop program = "/usr/bin/pkill -u username ssh"
Где находится система, к которой я подключаюсь, и где находится служебная учетная запись системы репликации приложений (админ в таком случае).
В ssh -M
используется для совместного использования соединения в режиме master и SSH.
-M Переводит ssh-клиент в «главный» режим для совместного использования соединения. Несколько опций -M переводят ssh в «главный» режим с подтверждением, требуемым перед приемом подчиненных подключений.
Результатом всего этого является чистые журналы... и что множество команд ssh, инициированных сервером репликации, повторно используют открытый сокет, созданный главным соединением.
Как только эта функция войдет в пакет EL6 OpenSSH, я смогу избавиться от сценария Monit и просто использовать ControlPersist
параметр.