sshd_config ForceCommand /usr/bin/rsync错误“连接意外关闭”

前端之家收集整理的这篇文章主要介绍了sshd_config ForceCommand /usr/bin/rsync错误“连接意外关闭”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何配置ForceCommand以允许备份用户执行任何rsync命令?将ForceCommand设置为/usr/bin/rsync后,我收到以下错误:连接意外关闭

托管要复制的文件的远程服务器上的/ etc / ssh / sshd_config:

Match User backup
    PasswordAuthentication no  
    PubkeyAuthentication yes  
    AllowTCPForwarding no  
    X11Forwarding no  
    ForceCommand /usr/bin/rsync

rsync命令在从远程服务器执行复制的本地服务器上运行:

rsync -avzh --progress backup@hostname.domain:/opt/backups/automatic/cron/MysqL/ /tmp/.  

rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [Receiver=3.0.7]

如果我将ForceCommand配置为完全rsync命令(例如下面的命令),我可以远程rsync成功备份用户,但对于此项目,我不想使用完整的命令,如下所示:

ForceCommand /usr/bin/rsync --server --sender -vlwkDonecf.iLew . /opt/backups/automatic/cron/MysqL/

如果我将ForceCommand配置为使用下面的脚本,我可以成功远程rsync.我很好奇为什么会这样,而/usr/bin/rsync却没有?

Match User backup
    PasswordAuthentication no  
    PubkeyAuthentication yes  
    AllowTCPForwarding no  
    X11Forwarding no  
    ForceCommand /home/backup/cron/validate-rsync

validate-rsync脚本:

#!/bin/sh   
#script to validate rsync  
#script source: http://troy.jdmz.net/rsync/#validate-rsync  

case "$SSH_ORIGINAL_COMMAND" in   
*\&*)   
echo "Rejected"   
;;   
*\(*)   
echo "Rejected"   
;;   
*\{*)   
echo "Rejected"   
;;   
*\;*)   
echo "Rejected"   
;;   
*\<*)   
echo "Rejected"   
;;   
*\`*)   
echo "Rejected"   
;;   
*\|*)   
echo "Rejected"   
;;   
rsync\ --server*)   
$SSH_ORIGINAL_COMMAND   
;;   
*)   
echo "Rejected"   
;;   
esac

我的主要问题是为什么ForceCommand /usr/bin/rsync不起作用?

我也很好奇这样做的最佳方式.我无法chroot备份用户,因为我正在从几个不同的文件夹复制.我真的不想使用完整的rsync –server –client等命令,因为我正在复制几个不同的文件夹,这似乎过多.我很好奇将最简单/最好的方法限制为将备份用户限制为rsync.

解决方法

原因很简单…… ForceCommand完全按照它所说的做法:你连接,无论你真正想做什么,它都会强迫你运行那个命令.在这种情况下,该命令是/usr/bin/rsync,没有标志.

rsync通过在连接的另一端运行另一个rsync副本并通过ssh与它通信来工作.但在这种情况下,它无法使用所需的标志启动另一端,因为该命令被/usr/bin/rsync替换

您的rsync-validate脚本可能是解决此问题的最佳方法.它检查请求以确保它是有效的rsync服务器命令,然后才运行它.可能会修改rsync以在没有参数的情况下直接检查$SSH_ORIGINAL_COMMAND,但可能有一个很好的安全原因不这样做.

猜你在找的Linux相关文章