我知道如何让用户使用密钥 ssh 进入另一个盒子:
ssh -l targetuser -i path/to/key targethost
Run Code Online (Sandbox Code Playgroud)
但是非帐户用户喜欢什么呢apache?由于该用户没有可以写入.ssh目录的主目录,因此整个事情一直失败:
$ sudo -u apache ssh -o StrictHostKeyChecking=no -l targetuser -i path/to/key targethost
Could not create directory '/var/www/.ssh'.
Warning: Permanently added '<hostname>' (RSA) to the list of known hosts.
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)
我尝试过使用-o UserKnownHostsFile=/dev/null和设置$HOMEto 的变体/dev/null,但这些都没有达到目的。我知道这sudo可能会为我解决这个问题,但我试图避免需要手动服务器配置,因为此代码将部署在许多不同的环境上。
有任何想法吗?
以下是我尝试过但不起作用的一些示例:
$ sudo -u apache export HOME=path/to/apache/writable/dir/ ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=path/to/apache/writable/dir/.ssh/known_hosts -l deploy -i path/to/key targethost
$ sudo -u apache ssh -o …Run Code Online (Sandbox Code Playgroud) 我正在尝试为多个服务器(一些 Windows,一些 Linux)编写备份系统脚本。我希望能够使用 rsync,但我不能(至少不是在所有情况下,因为有些服务器我无法安装 rsync,有些是 Win 服务器)。
更麻烦的是,有些服务器我可以通过 SSH 访问,而有些服务器我只能通过 FTP 访问。
我已经在 FTP 模式下使用 wget 和“时间戳”选项进行了测试,无论平台如何,它似乎都能很好地工作。我也在研究 rdiff-backup,尽管似乎需要 SSH。
是否有其他选项可能更强大/可靠,无论平台如何,都可以进行增量备份,并且可以在 SSH 或 FTP 上运行?
感谢您的任何想法
MacPorts 依靠 rsync 来完成其工作,而我依靠 SOCKS5 代理来完全访问互联网。如何让 rsync 通过我的代理运行其所有查询?
我遇到了一个奇怪的问题。我通常用来rsync在服务器之间同步文件,但现在这个实用程序的行为方式很奇怪。
首先,这是我使用的命令:
server1# rsync -av -e ssh ./server1_dir/ root@192.168.1.1:/server2_dir/
Run Code Online (Sandbox Code Playgroud)
它按应有的方式启动同步过程,但没有同步任何文件,仅同步目录。实际上并非所有目录,因为rsync进程挂起很长时间导致超时错误。
如果我终止该进程并再次尝试,它根本不会启动。我看到的唯一消息:
sending incremental file list
Run Code Online (Sandbox Code Playgroud)
第一个想法是——防火墙。但两台服务器都没有安装它。我什至尝试过手动编译最新rsync版本,但没有成功。
有人可以帮我解决这个问题吗?非常感谢。
更新。server1 上的 strace 输出
root@server1 [~]# ps auxf|grep [r]sync
root 13958 0.0 0.0 70676 1232 pts/0 S+ 23:29 0:00 | \_ rsync -avv -e ssh directory1 root@192.168.1.1:/home
root 13959 0.0 0.2 58436 3256 pts/0 S+ 23:29 0:00 | \_ ssh -l root 192.168.1.1 rsync --server -vvlogDtpre.isf . /root
root@server1 [~]# strace -p 13959
Process 13959 attached …Run Code Online (Sandbox Code Playgroud) 我有一个 rsync 备份脚本来在两个 Ubuntu 服务器(位于不同国家)之间传输数据。就文件数量而言,正在备份的数据相当大。总共大小约为17GB。该脚本在接收服务器上运行。所以,它基本上是一个拉力。用于登录的公私密钥身份验证。
该脚本运行良好;备份已经成功进行了好几个月了。
最近已经过去6天左右了,备份一直没有完成。rsync 进程运行大约 45 分钟左右。然后就结束了。我不知道为什么它停止了。据我所见,它甚至没有完成构建和扫描文件列表。我将 cron 输出定向到日志文件。在日志中,我看到的只是:receiving file list ... done。但我可以看到没有任何内容被传输到备份目的地。
如果我手动运行脚本,大约 45 分钟后,我只会看到以下内容:./sync.sh: line 51: 9078 Killed $RSYNC $OPTIONS $SOURCE $DESTINATION
我如何以及在哪里可以看到失败的原因?我如何知道哪个服务器实际上正在终止进程,发送者还是接收者?
拉机(脚本运行的地方)是一个低端机器。它是一个具有 256MB RAM 的 KVM 虚拟机。所以,我想知道文件结构的构建是否占用了太多 RAM,从而导致 OOM 错误。但我如何检查是否是这种情况呢?而且,文件并没有显着增加,导致突然失败。
任何提示将不胜感激。
谢谢。
按照 @APZ 的建议,我添加了几个更详细的标志(总共 3 个)并手动运行脚本,将输出重定向到文件。这是最后的输出:
(.... lots of file names....)
received 5795917 names
done
recv_file_list done
get_local_name count=5795917 /storage/ <======== Reached here after about 40 minutes. Was stuck here …Run Code Online (Sandbox Code Playgroud) 我知道这里有一些相同主题的问题,但没有答案对我有帮助。
首先,这是我的脚本。它应该将所有文件从源复制到目标(保留所有权限等)。如果文件或目录在源中被删除,它也应该在目标中被删除。哪个工作不正常。
#!/bin/bash
## Basic RSync Command
RCMD="rsync -rulpEXogtzh --stats --delete --force"
DDIR="/tank/bak/s1/archive/"
SDIR="/tank/bak/s1/backup/"
CDAY=`date '+%u'`
echo "Archive Number: ${CDAY}"
echo "Archiving current backup"
$RCMD $SDIR $DDIR/$CDAY
Run Code Online (Sandbox Code Playgroud)
如果我在源中有以下目录:
/etc
/home
/root
/usr
Run Code Online (Sandbox Code Playgroud)
并同步它们我在目标中有以下目录:
/etc
/home
/root
/usr
Run Code Online (Sandbox Code Playgroud)
所以这很好用。现在,当我从源中删除 /usr 时,我的源如下所示:
/etc
/home
/root
Run Code Online (Sandbox Code Playgroud)
但是当我再次运行脚本时,我的目标仍然是这样的:
/etc
/home
/root
/usr
Run Code Online (Sandbox Code Playgroud)
所以不知何故 rsync 忽略了 --delete
rsync 输出:
Number of files: 1983645
Number of files transferred: 0
Total file size: 17.69G bytes
Total transferred file size: 0 bytes
Literal data: 0 bytes
Matched data: …Run Code Online (Sandbox Code Playgroud) 我在数量和总文件大小方面都有大量文件。(我们说的是几 TB)。我想将这些文件/文件夹同步到外部备份系统一次,然后运行每日任务,该任务将根据每日更改重新同步备份。更改并不那么频繁,但有时我们可能会有大约 300GB 的差异(大约 1.5K 文件)。
我一直在考虑将 rsync 或 rdiff-backup 或 rsnapshot 作为一些工具,但我想先用 rsynch 运行一些测试。我遇到了 rsync 的一个主要问题,那就是:
检查现有文件的更改花费的时间太长。我们正在谈论超过 20 小时,这使得每日备份毫无意义。这是使用 rsync -rvhzP 或 -rvhP。即使没有添加/更改/删除文件,它似乎只是扫描所有文件并且需要几个小时。
难道我做错了什么?我提到的任何其他系统(rdiff-backup 或 rsnapshot)的性能会更好吗?我一直假设它们是基于 rsync 的。
提前致谢。
更新额外信息: 我们有大约 2600 个目录和 100k 个文件,总共大约 3.5TB,使用rsync version 3.0.9 protocol version 30. 就每日更改而言,通常每天有 10 个文件更改,但它可以在大约 1.5K 文件更改/添加/删除和大约 300Gb 的容量达到峰值(尽管这些峰值并不那么频繁,并且通常会分散)
我们正在寻找一种快速的方法来拍摄我们的 gluster 砖的时间点快照。
它是一个完美的时间点快照并不重要(即,如果文件在备份期间更改/添加/删除,备份可以有/没有这些更改)。
理想情况下,它可以作为实时(无停机)备份运行,但我们可以处理从集群中删除一个节点,然后在需要时重新添加它。
备份需要传输到远程位置,但如果需要,可以在本地进行初始备份后完成此操作。
我们有多个砖块。所有这些都需要备份,可以单独或一次性完成。
glusterfs 3.5.3在撰写本文时,我们目前正在运行,但在发布新版本时确实会升级。
我们已经考虑过使用 rsync(就像我们在普通卷上所做的那样)但是它在 gluster 上真的很慢,因为我们有成千上万的非常小的文件(100kb - 3mb),我的理解是 gluster 与每个节点的所有节点对话文件以确保它提供正确的版本。我们可以在服务器节点之一(而不是通过 glusterfs 客户端)上的数据目录位置进行 rsync 同步吗?这是否会按预期工作并且速度更快,因为它不需要检查所有节点的内容?
Gluster Volume Snapshot听起来像是完美的解决方案,但我认为它还没有发布。
gluster 存储节点有 LVM,但我不太熟悉它的来龙去脉。这可能是一个解决方案吗?
有没有其他人对如何处理这种情况有好的建议?还是真实的生活经历?谢谢你。
我正在使用这样的脚本:
rsync -avu --delete --progress user@host:~/backup .
Run Code Online (Sandbox Code Playgroud)
每次过一段时间后,都会收到此错误:
rsync: connection unexpectedly closed (10251754 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.0]
rsync: connection unexpectedly closed (45482 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.0]
# generator = Debian 5, rsync version 3.0.3 protocol version 30 (Generator[A])
# receiver = Ubuntu 14.04, rsync version 3.1.0 protocol version 31 (Receiver[A])
Run Code Online (Sandbox Code Playgroud)
我有十多年的经验rsync,我尝试了所有方法,但我无法弄清楚为什么会发生这种情况。
双方:我在日志中没有错误,在 …
在命令已经启动后,在bash 脚本期间运行动态流量整形有哪些解决方案?这甚至可能吗?
我的用例是,我rsync在大量磁盘上运行到远程备份位置,这在 Internet 上需要很多小时,所以我想将流量整形应用于rsync调用的线路,但仅限于指定时间。
因此,例如,当前的计划是在上午 5 点到上午 10 点和下午 3 点到晚上 9 点将上传减少到每秒 1000 KB (1.0MB/s)。
我已经看过了--bwlimit=1000,rsync但这会rsync在它运行的整个时间里形成,而不仅仅是所需的塑造时间框架。
rsync启动后可以减速吗?因为如果以某种方式可能,那将是我的解决方案。
我见过有人建议,wondershaper但我想知道这是否可以以编程方式“打开和关闭”?如果是,如何做到这一点?
这是一个模型,我使用 Stackoverflow 的慷慨贡献对它进行了黑客攻击,它提供了指定和检查时间表的功能(基于小时,这对我目前的需求来说很好)......
#!/bin/bash
declare -A shapingTimes
declare -A keycount
useTrafficShaping=1
# schedule
shapingTimes=([0-from]=5 [0-to]=10) # 5am to 10am
shapingTimes+=([1-from]=15 [1-to]=21) # 3pm to 9pm
# because keys and array content differs in order from the way they are defined, …Run Code Online (Sandbox Code Playgroud)