Назад | Перейти на главную страницу

использование ssh для автоматического получения информации из удаленного ящика

Приветствую всех.

Мне нужен ответ на вопрос «основы-202»; Прошло много времени.

Как в cronjob автоматически подключаться к удаленному ящику по ssh для получения информации, для просмотра которой обычно требуется эквивалентность root?

Подробности:

во всех моих коробках есть

  1. вход в систему root отключен через /etc/login.block.

  2. вход root через ssh заблокирован в / etc / ssh / sshd_config: PermitRootLogin no

  3. все входы ssh осуществляются через пару ключей pub / priv. Ручные пароли отключены. Пароль Аутентификация нет

  4. Я установил ограниченный uid 'automate' с парой ключей, который используется для автоматизированных задач подключения ssh (например, для использования в заданиях cron). 'automate', очевидно, не является sudoer, колесом или идентификатором пользователя группы 0.

Все хорошо (и, вероятно, неполно, но это уже другой пост).

Но...

Есть вещи, которые, по-видимому, требуют эквивалентности root, например netstat -patn для просмотра -all- tcp-соединений.


$ netstat -patn

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)


или

('apt-mirror' - имя хоста удаленного ящика)


$ ssh apt-mirror netstat -patn
(No info could be read for "-p": geteuid()=1008 but you should be root.)
Active Internet connections (servers and established)


Если вы находитесь в интерактивном сеансе, то для просмотра всех подключений tcp введите:

$ sudo netstat -patn

Но я не думаю, что это можно сделать в автоматическом сеансе ssh.


$ ssh -t apt-mirror sudo netstat -patn
[sudo] password for automate: <hangs here>

По нескольким причинам:

  1. sudo в интерактивном режиме запрашивает пароль для автоматизации
  2. В любом случае, "automate" - это не sudoer.

Я, наверное, смогу что-нибудь сделать, чтобы это сделать, но я бы предпочел сделать это правильно. (Является ли ssh правильным подходом для этого типа деятельности?) Вопрос в том, как правильно делать что-то подобное?

Спасибо!

Отредактируйте / etc / sudoers (используя visudo) на удаленном сервере и позвольте вашему автоматическому пользователю запускать эти команды sudo специально, без запроса пароля.

Вы не можете делать «вещи, требующие привилегий root» без привилегий root.

Судя по приведенным вами примерам, вы выполняете своего рода мониторинг, а не выполняете действия (service httpd status против service httpd restart)

Учитывая вашу среду вокруг корневых ограничений, я бы лично использовал что-то вроде Nagios NRPE, чтобы получить необходимую информацию. NRPE предназначен для раздачи информации, не предлагая при этом никаких потенциально интерактивных сеансов. Вы можете определить свои собственные команды, которым разрешено выполнение удаленным хостом, и ограничить, какие удаленные хосты разрешены.

В своих примерах вы можете добавить что-то вроде:

command[all_net_conns]=/usr/bin/sudo /bin/netstat -patn

Вам нужно будет разрешить соответствующий беспарольный доступ к sudo для пользователя Nagios / NRPE, но вы можете ограничить его необходимыми командами и заблокировать учетную запись, чтобы никто не мог получить к ней доступ.

Обратной стороной, конечно же, является отсутствие аутентификации или авторизации по имени пользователя / паролю / паре ключей и т. Д. При доступе, хост либо может, либо не может получить доступ к службе NRPE для получения информации.