Создайте скрипт оболочки для входа на сервер и отправки по электронной почте сведений об использовании диска.

Создайте скрипт оболочки для входа на сервер и отправки по электронной почте сведений об использовании диска.

Я хотел бы создать скрипт оболочки, который будет входить на сервер, получать данные об использовании диска с сервера, отправлять мне письмо по электронной почте и затем выходить с сервера. Также, если возможно, делать это ежедневно. Вот что у меня есть:

#!/usr/bin/bash

ssh -p 1111 [email protected]

CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')

mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at:  $CURRENT%
EOF
fi

Имя скрипта оболочки — example.sh. Когда я его запускаю, он постоянно запрашивает у меня пароль, и после входа в систему ничего не происходит.

решение1

Сначала сгенерируйте открытый ключ, который будет использоваться для входа в удаленную систему без пароля:

ssh-keygen -t rsa -b 4096 -C "your_username"

Это сгенерирует 4096-битный ключ RSA в вашем ~/.ssh/каталоге с вашим именем пользователя в качестве метки. Затем добавьте этот новый ключ в ваш ssh-agent, чтобы он использовался при подключении через SSH.

ssh-agent -s
ssh-add ~/.ssh/id_rsa

Если при генерации ключа вы указали пользовательское имя, замените id_rsaего этим именем.

Теперь скопируйте содержимое вашего открытого ключа в буфер обмена.

clip < ~/.ssh/id_rsa.pub

Затем войдите на удаленный сервер и отредактируйте файл удаленного пользователя .ssh -p YOURPORT [email protected]authorized_keys

vim .ssh/autorized_keys

Вставьте содержимое, которое вы только что скопировали в буфер обмена. Это позволит подключаться с вашего компьютера к удаленному хосту без пароля, вместо этого используя сертификаты (обычно гораздо более безопасные, в любом случае).

Теперь вам нужно создать скрипт example-script.shв домашнем каталоге вашего удаленного хоста (не забудьте chmod a+x example-script.shзатем сделать его исполняемым).

#!/usr/bin/env bash
CURRENT=$(df / | awk '/\// { print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at:  $CURRENT%
EOF

А теперь создайте скрипт в локальном домашнем каталоге, local-script.shчтобы впоследствии легко запустить команду (опять же, не забудьте сделать его исполняемым).

#!/usr/bin/env bash
ssh -P YOURPORT [email protected] ./example-script.sh

Этот скрипт позволяет вам запустить ./local-script.shиз вашего домашнего каталога удаленный скрипт всего в одну строку. Затем вы можете добавить это как псевдоним к вашему .bashrcфайлу, чтобы вы могли просто запустить local-scriptили любой другой псевдоним, который вам может понадобиться. Вы также можете использовать абсолютный путь ( /home/your_username/local-script.sh), crontabчтобы он запускался в определенное время каждый день.

решение2

Сначала объясним, почему ничего не происходит, скорее всего, из-за синтаксиса. Ваша команда ssh имеет вид: ssh server, что означает, что вы хотите только войти в систему, а затем вручную ввести некоторые команды в интерактивном режиме. Но если вы хотите, чтобы какая-то команда запускалась автоматически после входа в систему, вам следует сделать : ssh server somecommand, поэтому простое наличие somecommandна следующей строке не сработает.

Если вам нужна система, которая будет отправлять по электронной почте информацию о дисковом пространстве в любое время и в то же время поддерживать запланированную отправку писем, я бы порекомендовал систему из трех частей:

  • один скрипт на сервере, который получает информацию о диске и логику электронной почты, например,/home/yourusername/script.sh
  • crontab для запуска script.sh
  • для ваших произвольных, спонтанных запросов вы можете подключиться по ssh и выполнить скрипт

скрипт.sh

Это скрипт, который вы размещаете на сервере, например, /home/yourusername/script.sh.

#!/bin/bash

s="Disk Space Alert: $(df / | grep / | awk '{ print $5}')"

mail -s $s [email protected]

# Feedback
echo $s

Я удалил, sedпотому что он просто удалял %знак, но затем вы добавили его обратно позже, это кажется избыточным использованием sed, поэтому я удалил его.

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

кронтаб

Отредактируйте crontab на вашем сервере, например, подключитесь к нему по ssh, а затем выполните следующие команды.

$ crontab -e

Вы знаете, что формат

# m h dom mon dow  command

так что для ежедневного каждый день 8 утра

0 8 * * * /home/yourusername/script.sh

Итак, если вы уже протестировали скрипт и знаете, что он работает для отправки писем, то crontab запустит скрипт и отправит письмо в 8 утра каждый день.

произвольный запрос на получение информации о диске по электронной почте

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

ssh -p 1111 [email protected] /home/yourusername/script.sh

Здесь используется синтаксис ssh, ssh server somecommandпоэтому он входит в систему, выполняет любую команду и возвращает результаты на ваш локальный стандартный вывод.

Поскольку у него есть линия обратной связи, он не только должен отправить электронное письмо, но вы также должны увидеть сообщение, Disk Space Alert: ...чтобы вы, по крайней мере, немедленно получили ответ о том, был ли ваш скрипт запущен или нет.

Связанный контент