Я хотел бы создать сценарий оболочки, в который это войдет к серверу, получит использование диска от сервера, электронной почты мне, и затем выйдет с сервера. Кроме того, если это возможно, для делания этого ежедневно. Это - то, что я имею:
#!/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, Когда я выполняю его, это продолжает просить у меня пароль и после того как я зарегистрирован, ничего не происходит.
Во-первых, чтобы объяснить, почему ничего не происходит, скорее всего, из-за синтаксиса. Ваша команда ssh имеет форму: ssh server
, который является, когда Вы только хотите войти в систему и затем вручную напечатать некоторые команды в интерактивном режиме. Но если Вы хотите, чтобы некоторая команда управлялась автоматически после логина, Вы должны делать: ssh server somecommand
, поэтому просто имея somecommand
на следующей строке не будет работать.
ну, если Вы хотите систему к обеим почтовой информации о дисковом пространстве каждый раз, когда Вы хотите, и в то же время поддержите намеченные электронные письма, я рекомендовал бы три системы части:
/home/yourusername/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 на Вашем сервере, например, 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: ...
сообщение так, чтобы Вы, по крайней мере, получили непосредственную обратную связь, что Вашим сценарием управляли или нет.
Во-первых, генерируйте открытый ключ для использования для вхождения в удаленную систему без пароля:
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
заставить его работать в определенное время каждый день.