我想限制访问一台Linux服务器,以便能够获取一组特定的日志。 理想情况下,我希望能够在本地运行rsync从服务器获取日志,出于安全原因,我不希望给用户完整的sshlogin访问权限。
仅为此目的设置一个单独的用户。 让用户仅使用SSH密钥login。 在用户的authorized_keys文件中,编辑公钥只允许一个命令。 该命令不应该是一个shell脚本的指针; 而是直接将shell脚本插入到密钥中。
这是一个例子。 这里的设置是在服务器上,有一个cron作业,每天将日志移动到/ var / log / logfetch。 另一台服务器,IP 10.1.2.3,将连接并发送一个命令。 如果该命令是BACKUP,则客户机将接收目录/ var / log / logfetch中的文件的gzipped tar文件。 如果它是文件名,那么在/ var / log / logfetch中具有该名称的文件将被删除。 任何其他命令将被忽略。 所有命令将被logging。 只能从一个IP地址进行连接。
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="read ARG;HOST=$(/usr/bin/hostname);if [ \"$ARG\" = \"BACKUP\" ]; then cd /var/log/logfetc;/usr/bin/tar -cf - *;/usr/bin/logger -t LOGFETCH -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";else cd /var/log/logfetch; if [ -f $ARG ]; then /usr/bin/rm $ARG;/usr/bin/logger -t LOGFETCH -p daemon.info \"INFO: Backup-file \\"$ARG\\" removed on $HOST by $USER\";else /usr/bin/logger -t LOGFETCH -p daemon.info \"WARNING: $USER failed to remove \\"$ARG\\" on $HOST\";exit -1;fi;fi " ssh-dss AA.....
这对您的特定情况可能是过度的,但是对于第三方来说,这是相当困难的,应该可以适应您的特定需求。