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,但可能有一个很好的安全原因不这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |