通过 SSHauthorized_keys 命令验证 rsync="..."

1 ssh rsync

我正在尝试通过 sshd 的 authorized_keys 文件验证 rsync。

问题是我无法从验证脚本执行 rsync。


这是我的authorized_keys文件:

command="/home/username/Desktop/valrsync username" ssh-rsa AAAA [...]
Run Code Online (Sandbox Code Playgroud)

这是每次尝试不同的 valrsync 脚本:

测试 1 -

$SSH_ORIGINAL_COMMAND
Run Code Online (Sandbox Code Playgroud)

输出 -

$ rsync [...] / username@remotemachine:/
/home/username/Desktop/valrsync: line 2: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
Run Code Online (Sandbox Code Playgroud)

而且,更重要的是,测试 2 -

#!/usr/bin/python

import os
os.system(os.getenv('SSH_ORIGINAL_COMMAND'))
Run Code Online (Sandbox Code Playgroud)

输出(从本地机器运行 rsync 并valrsync在远程机器上获取输出) -

$ rsync [...] / username@remotemachine:/
sh: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [sender=3.0.7]
Run Code Online (Sandbox Code Playgroud)

我知道 rsync 以某种方式在远程机器上产生了一个自己的实例,显然当我尝试通过脚本执行 rsync 命令时没有引用该实例。rsync 未安装在服务器上,我知道它不应该安装。

现在的问题是,我能做些什么(除了可能在服务器上安装 rsync ......?)

0xC*_*22L 7

比编写自制脚本更好的方法是使用rrsync,在基于 Debian 的发行版上,您应该已经将其安装rsync/usr/share/doc/rsync/scripts/rrsync.gz. 在这种情况下,只需运行以下命令将 gzip 压缩的脚本解压到/usr/bin/rrsync

gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c|sudo tee /usr/bin/rrsync && sudo chmod +x /usr/bin/rrsync
Run Code Online (Sandbox Code Playgroud)

(当已经运行时,root您显然可以省略sudo调用)

或者在这里下载rrsync

提醒:这里的先决条件是rsync在远程计算机(带有authorized_keys文件的计算机)上安装。

完成后,您可以简单地command=在带有公钥的行前面添加 a ,调用rrsync.

通常您会在 中包含一些限制性 SSH 选项command=,因此它可能如下所示:

command="/usr/bin/rrsync -wo /data/backup/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ecdsa-sha2-nistp521 AAAAE...
Run Code Online (Sandbox Code Playgroud)

通过提供该目录(您可以用于-ro只读和-wo只写),您可以在rsync调用时省略该目录。

所以你的命令行将变成rsync [...] / username@remotemachine:(注意 后面丢失的路径:)。

  • 在某些操作系统上,“rrsync”位于“/usr/local/bin/rrsync”。如果您不确定,请使用“whereis rrsync”。 (2认同)

lar*_*sks 5

您收到的错误是rsync: command not found. 这通常意味着您的$PATH环境变量设置不正确。使用您的第一个测试,明确设置PATH为包含安装 rsync 命令的目录。例如:

#!/bin/sh

PATH=/usr/local/bin:$PATH
export PATH

$SSH_ORIGINAL_COMMAND
Run Code Online (Sandbox Code Playgroud)

确保使脚本可执行 ( chmod 755 valrsync)。

所有这些都假设 rsync 实际上安装在目标系统上。

  • 是的,您需要在源计算机和目标计算机上都安装 rsync。Rsync 需要在连接的两端运行(否则,rsync 与什么通信?)。 (2认同)