lar*_*sks 12
sftp 解决方案还需要每个人都使用 ssh 登录,因此您在这里并没有真正丢失任何东西。授予 ssh 访问权限并不一定意味着完全的 shell 访问权限,例如,这显示了如何使用 sshauthorized_keys
文件允许通过 rsync 进行备份,同时将可用命令限制为仅rsync 接收器。
事实上,如果您选择基于密钥的身份验证,而不是密码身份验证(您应该这样做),那么您可以在一个用户帐户下运行所有内容,而不需要多个帐户。您将使用密钥来识别远程用户,并将 rsync 接收器定向到特定目录。
像这样的东西,在你的authorized_keys
文件中:
command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2
Run Code Online (Sandbox Code Playgroud)
使用user1
私钥的人会备份到/tmp/user1
,使用user2
私钥的人会备份到/tmp/user2
。等等……
通常rsync
从客户端到远程服务器执行,但添加额外的详细 switch: SSH -v
,然后 grep for Sending command
。您将看到客户端发送到远程服务器的确切命令:
rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"
Run Code Online (Sandbox Code Playgroud)
就我而言,它是
rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path
Run Code Online (Sandbox Code Playgroud)
如@larsks 所述,将此添加command="..."
到远程服务器/home/USER/.ssh/authorized_keys
文件。如有必要,添加其他安全设置:
no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server
全部一起:
command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server
Run Code Online (Sandbox Code Playgroud)
(取自非常好的教程http://en.positon.org/post/Rsync-command-restriction-over-SSH)