创建 shell 脚本来登录服务器并通过电子邮件发送磁盘使用情况

创建 shell 脚本来登录服务器并通过电子邮件发送磁盘使用情况

我想创建一个 shell 脚本,它将登录到服务器,从服务器获取磁盘使用情况,通过电子邮件发送给我,然后退出服务器。此外,如果可能的话,每天都执行一次。这是我的:

#!/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

该 shell 脚本的名称是 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.shcrontab使其每天在特定时间运行。

答案2

首先解释一下为什么什么都没发生,很可能是因为语法。您的 ssh 命令的形式是:ssh server,当您只想登录,然后手动交互地输入一些命令时。但是,如果您希望在登录后自动运行某些命令,您应该执行:ssh server somecommand,因此仅somecommand在下一行中执行是行不通的。

好吧,如果您想要一个系统可以随时通过电子邮件发送磁盘空间信息,并同时支持预定的电子邮件,我建议使用由三部分组成的系统:

  • 服务器上的一个脚本用于获取磁盘信息和电子邮件逻辑,例如/home/yourusername/script.sh
  • crontab 运行脚本.sh
  • 对于你的任意、一时兴起的请求,你可以 ssh 并执行脚本

脚本

这是您放在服务器上的脚本,例如 /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: ...,以便您至少可以立即获得脚本是否运行的反馈。

相关内容