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

Я хотел бы создать сценарий оболочки, в который это войдет к серверу, получит использование диска от сервера, электронной почты мне, и затем выйдет с сервера. Кроме того, если это возможно, для делания этого ежедневно. Это - то, что я имею:

#!/usr/bin/bash

ssh -p 1111 server@server.example.com

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

mail -s 'Disk Space Alert' username@example.com << EOF
Disk usage is at:  $CURRENT%
EOF
fi

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

0
задан 16 November 2015 в 07:21

2 ответа

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

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

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

script.sh

, Это - сценарий, Вы ставите сервер, например, в/home/yourusername/script.sh.

#!/bin/bash

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

mail -s $s username@example.com

# Feedback
echo $s

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

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

, crontab

Редактирует crontab на Вашем сервере, например, ssh в Ваш сервер и затем возобновляет эти команды

$ crontab -e

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

# m h dom mon dow  command

так для ежедневной газеты каждый день 8:00

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

Поэтому, пока Вы уже проверили сценарий и знаете, что она работает, чтобы послать электронные письма, тогда crontab будет управлять сценарием и заставлять электронную почту посылаться в 8:00 каждый день

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

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

ssh -p 1111 server@server.example.com /home/yourusername/script.sh

, Это использует ssh синтаксис ssh server somecommand, таким образом, она загружается, выполняет любую команду и возвращает результаты к Вашему местному стандарту.

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

1
ответ дан 30 September 2019 в 04:19

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

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

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

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

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

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

clip < ~/.ssh/id_rsa.pub

Затем, войдите в удаленный сервер с ssh -p YOURPORT user@remote.host и отредактируйте удаленного пользователя 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' username@example.com << EOF
Disk usage is at:  $CURRENT%
EOF

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

#!/usr/bin/env bash
ssh -P YOURPORT user@remote.host ./example-script.sh

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

3
ответ дан 30 September 2019 в 04:19

Другие вопросы по тегам:

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