创建Rsync GUI以备份到远程服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建Rsync GUI以备份到远程服务器相关的知识,希望对你有一定的参考价值。
所以我在Python中创建一个备份GUI,它基本上要求用户输入他们的用户名/密码和源目录,以便可以将其发送到远程服务器。我遇到的唯一麻烦是在执行命令后将密码(在GUI中输入)传递给服务器:
rsync -options source_path rsync_user@rsync_server:remote_path
由于我希望用户每次使用GUI时都进行身份验证,因此我不想设置自动ssh密钥会话。我看了一下Pexpect和Paramiko,但期望看起来不太安全,我不知道如何配置Paramiko,所以我可以从本地计算机rsync到远程服务器。
基本上我正在寻找一种方法来在rsync命令之后将密码传递给服务器(并信任主机),而不需要任何类型的终端交互(GUI的目的)。
你能用这个吗?
远程守护程序上的某些模块可能需要身份验证。如果是这样,您将在连接时收到密码提示。您可以通过将环境变量
RSYNC_PASSWORD
设置为要使用的密码或使用--password-file option
来避免密码提示。在编写rsync脚本时,这可能很有用。警告:在某些系统环境中,所有用户都可以看到变量。在那些使用
--password-file
的系统上建议使用。
来自rsync(1)
。
首先,你这样做很棒。 rsync应该有更多的GUI。我写过卡车 - an rsync GUI app for Mac - 使用Python和Qt(PyQt)。我选择的解决这个问题的方法是生成一个本地密钥对;在本地保存私钥;并将公钥附加到远程主机的authorized_keys文件,如下所示:
PRIV_KEY_PATH = "~/.ssh/private.key"
if os.path.exists(PRIV_KEY_PATH):
key = paramiko.RSAKey(filename=PRIV_KEY_PATH)
else:
touch(PRIV_KEY_PATH)
key = paramiko.RSAKey.generate(bits=1024, progress_func=self.keygen_progress)
key.write_private_key_file(PRIV_KEY_PATH)
try:
ftp_cli.chdir(".ssh")
ftp_cli.chdir("..")
except IOError:
ftp_cli.mkdir(".ssh", mode=0o700)
key_line = "{name} {key} {comment}".format(name=key.get_name(),
key=key.get_base64(),
comment="hello world")
with ftp_cli.open(".ssh/authorized_keys", mode="a+") as fh:
fh.seek(0)
lines = fh.readlines()
if not key_line in lines:
fh.write("
" + key_line)
fh.close()
然后,当你调用rsync时,传递类似--rsh=ssh -i ~/.ssh/private.key
的东西。
在几行中,您已配置无密码SSH登录并利用它来促进rsync。恭喜您选择Python。
正如您所说,您希望用户在下次使用GUI时再次进行身份验证,您必须将其视为临时键控会话并相应地清理authorized_keys文件。我还使用Tkl和Expect为此构建了一个解决方案,我不建议使用该路由。除非你捏造你的实施,否则Paramiko是安全的。 (P)期望本身并不安全。
你也可以考虑使用setting up Paramiko as an SSH forwarding server,但是我担心通过Paramiko将它们瓶颈来抑制rsync的性能。我想我更喜欢使用机器的本机SSH实现。
以上是关于创建Rsync GUI以备份到远程服务器的主要内容,如果未能解决你的问题,请参考以下文章
rsync如何同步单个文件到服务器上,使用rsync命令将备份同步到远程服务器的四个简单步骤...