创建备份到远程服务器的Rsync GUI



所以我在Python中创建了一个备份GUI,它基本上要求用户提供用户名/密码和源目录,以便可以将其同步到远程服务器。我遇到的唯一麻烦是在执行命令后将密码(在GUI中输入)传递给服务器:

rsync -options source_path rsync_user@rsync_server:remote_path

因为我希望用户每次使用GUI时都要进行身份验证,所以我不想设置一个自动的ssh密钥会话。我看了一下Pexpect和Paramiko,但expect似乎不太安全,我不确定如何配置Paramiko,以便我可以从本地计算机rsync到远程服务器。

基本上我正在寻找一种方法来传递密码到服务器(并信任主机)后,rsync命令没有任何类型的终端交互(GUI的目的)。

你能用这个吗?

远程守护进程上的一些模块可能需要身份验证。如果因此,当您连接时,您将收到一个密码提示。你可以避免通过设置环境变量提示密码RSYNC_PASSWORD到您想要使用的密码或使用--password-file option。这在编写rsync脚本时可能很有用。

警告:在某些系统上,环境变量对所有人可见用户。在这些系统上,建议使用--password-file

From rsync(1) .

首先,你这么做真是太棒了。应该有更多的rsync gui。我用Python和Qt (PyQt)编写了Truck——一个Mac上的rsync GUI应用程序。我选择的解决这个问题的方法是生成一个本地对;将私钥保存在本地;并将公钥附加到远程主机的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("n" + key_line)
        fh.close()

然后,当你调用rsync时,传递--rsh=ssh -i ~/.ssh/private.key之类的东西给它。

在几行代码中,您已经配置了一个无密码的SSH登录,并使用它来促进rsync。祝贺您选择了Python。

正如您所说,您希望用户在下次使用GUI时再次进行身份验证,因此您必须将此视为临时密钥会话,并适当地清理authorized_keys文件。我还使用Tkl和Expect构建了一个解决方案,我不推荐这种方法。帕拉米科是安全的,除非你修改实施方案。(P)期望本身并不是不安全的。

你也可以考虑将Paramiko设置为SSH转发服务器,但我担心通过Paramiko阻碍rsync的性能。我想我更喜欢使用本机的SSH实现。

相关内容

  • 没有找到相关文章

最新更新