我的业务目的是监控Linux上的远程文件系统,如果有任何新文件,将它们SFTP到另一台机器上并删除它们。
但是,限制是我无法在远程计算机上安装任何库。因此,我正在考虑对远程计算机实施间隔 SSH 命令轮询。
我的问题:
间隔轮询可以实现吗?或者你有更好的想法吗?
我应该使用什么样的 SSH 命令来监控远程计算机?
答案1
简单又偷懒的方法:
crontab
与本地系统上的普通用户(每 15 分钟):
*/15 * * * * /bin/bash /path/to/script.sh
代码:
#!/bin/bash
source ~/.bashrc
ssh-add /home/me/.ssh/id_rsa
ssh user@remote-server printf '%s\n' '/path/to/new_files/*' > ~/.$$_remote-files
if ! cmp ~/.$$_remote-files ~/.remote-files &>/dev/null; then
echo 'new file(s) or dir(s) detected !'
# ssh user@remote-server rm -rf '/path/to/new_files/*'
mv ~/.$$_remote-files ~/.remote-files
fi
要实现自动 ssh 登录,您必须生成一个没有密码的 ssh-passphrase:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/me/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/me/.ssh/id_rsa
Your public key has been saved in /home/me/.ssh/id_rsa.pub
The key fingerprint is:
123456789ABCDEF
答案2
答案3
更好的方法是在文件服务器上安装扫描仪(基于inotify)。一旦新文件出现,扫描仪就会向任何感兴趣的人发送某种消息(无论是 UDP 广播、电子邮件还是其他消息)。这将需要一些编程,并且此类应用程序必须安装并在文件服务器上运行。
如果您无法做到这一点 - 投票是唯一的选择。不是
ssh
命令,而是sftp
命令。该命令是ls
.它还需要一些编程,但可以完全在 shell 中完成。