**关闭。**这个问题是not about programming or software development。目前不接受答复。
这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
2天前关闭。
Improve this question
部分上下文:
- 我的Debian服务器上运行着一些服务,时不时地我想对相关数据进行备份
- 我在服务器上有一个
backup
目录,我通过停止服务手动更新该目录,将数据复制到该目录(使用rsync -Payz --delete --recursive
,它保留元数据并避免不必要的复制),然后重新启动服务 - 我想在我的笔记本电脑上有一个
backup
目录的副本,并保持更新 - 为此,我想运行类似
rsync -Payz --delete --recursive user@server:backup .
的代码 - 这里的主要困难是,许多文件的所有者是
root
,不允许rsync
在没有sudo
的情况下移动它们(服务在容器中运行,这些权限在容器级别是有意义的,但在主机级别,系统认为主机的root
是所有者) - 要创建服务器备份,我可以简单地调用
sudo rsync
,但对于笔记本电脑上的副本,我必须告诉rsync
在服务器上运行sudo rsync
,并将密码请求转发给客户端,这将我们带到了当前的问题
我做了什么
我遵循了this post的建议,所以我运行的完整命令是
rsync -Payz --delete --recursive -e "ssh -X" --rsync-path="sudo -A rsync" user@server:backup .
--rsync-path="sudo rsync"
用于在远程上运行具有sudo
权限的rsync
- 使用
--rsync-path="sudo -A rsync"
,以便sudo
依赖ssh-askpass
获取密码 -e "ssh -X"
启用X11-Forwarding,以便ssh-askpass
可以要求我在笔记本电脑上键入密码- 问题 *
- 这曾经在我的旧笔记本电脑(MacBook)上使用,但在我的新笔记本电脑(运行Manjaro发行版)上没有。鉴于链接的帖子的评论说它在Ubuntu上工作,我假设我需要改变我的配置中的一些东西,或者我可能缺少一个依赖项或其他东西,但我不知道是什么或为什么
- 我得到的错误如下:
Error: Can't open display:
sudo: no password was provided
sudo: a password is required
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [Receiver=3.2.7]
- 当我使用
-e "ssh -Xv"
运行该命令时,出现以下行,似乎是问题所在
debug1: X11 forwarding requested but DISPLAY not set
debug1: Sending command: sudo -A rsync --server --sender -logDtprze.iLsfxCIvu . backup
Error: Can't open display:
sudo: no password was provided
sudo: a password is required
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
debug1: channel 0: free: client-session, nchannels 1
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
Transferred: sent 2176, received 2464 bytes, in 0.2 seconds
Bytes per second: sent 9432.6, received 10681.1
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [Receiver=3.2.7]
因此,显然当rsync
在此处运行ssh -X
时,DISPLAY
变量未设置
- 但是如果我运行
ssh -X 'echo $DISPLAY
,它会显示localhost:10.0
,并且运行ssh -X user@server 'sudo ls'
会像预期的那样询问我密码(通过标题为“OpenSSH Authentification Passrase Request”的窗口) - 我相信这意味着问题出在
ssh -X
和rsync
之间的交互上,而不是X11-Forwarding本身,但我不知道我做错了什么
1条答案
按热度按时间kmpatx3s1#
我只能建议您跟踪通过rsync传递的环境,如下所示。添加选项
-n
以不进行传输,并使用一些/tmp/dummy
文件。在命令前面加上strace
,使用选项-v
查看execve()
调用期间的环境,-f
跟随子节点,-o log
输出到某个日志文件。比如说浏览日志文件时,您应该看到如下内容
(one长线)。在这个示例输出中,5261是进程id。
/usr/bin/ssh
的execve()
系统调用显示了第一个数组[...]
中的ssh
的参数,以及传递给第二个数组[..."DISPLAY=:0"...]
中的命令的环境。确保“DISPLAY=:0”在第二个数组中。如果不是,则在文件前面查找rsync
的第一个execve()
,看看它是否在那里。请注意,您可能需要忽略许多execve的ssh
的尝试和失败,因为每个目录在当前PATH
是尝试。您可以将第二个
-f
添加到strace
以获得单独的日志文件,每个进程一个,而不是全部混合。