grep на удаленном хосте с несколькими командами

Один лайнер, который перечисляет всех пользователей и печатает cron для каждого пользователя:

for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done

Это решение:

  • Не требует знания системного пути к crontab (, например. /var/spool/cron/crontabs/против/var/spool/cron/
  • Не будут перечислены «сиротские» хроны, т. е. хроны для пользователей, которые больше не существуют (и, следовательно, не выполняются эффективно)
-1
31.07.2020, 16:57
2 ответа

Прежде всего, вам действительно не нужно sudo suи уж точно не нужно sudo su - root. Команда suпо умолчанию имеет значение root, но существует команда sudoдля запуска команд, которые необходимо запускать от имени root. Так что вам просто нужно sudo command. Тем не менее, вам следует избегать запуска команд от имени root, если это действительно не требуется, а hostnameне требует root. Имея все это в виду, это должно делать то, что вам нужно:

ssh -q -t -o ConnectTimeout=10 learnserver sh -c "hostname && sudo grep PermitRootLogin /opt/ssh/etc/sshd_config"

Другими словами, вместо того, чтобы пытаться запускать несколько команд, объедините их в одну. Здесь мы используем sh -c command, что означает «запустить sh, а затем запустить command».

0
18.03.2021, 23:15

Вы можете передать набор команд в виде сценария в ssh. Например, для вашего случая

{
  echo "sudo su -"
  echo "hostname"
  echo "grep PermitRootLogin /opt/ssh/etc/sshd_config/"
} > /tmp/some-script.sh

, а затем

ssh your-remote < /tmp/some-script.sh

обратите внимание, что «создание сценария» — это всего лишь пример того, каким должен быть ваш сценарий.

0
18.03.2021, 23:15

Теги

Похожие вопросы