Python程序rsync

4

我在Python(Ubuntu)上制作程序时遇到了困难:“在不提示密码的情况下从直接连接的Linux机器获取文件”

目前,我正在Python中使用此命令,但希望提前输入密码,这样它就不会提示我输入密码。

import os
os.system("echo 'hello world'")
os.system("rsync -rav pi@192.168.2.34:python ~/")

其他Linux机器的IP地址为:192.168.2.34 密码为:raspberry 主机名:pi


2
你可能可以使用subprocess来完成它。 - Padraic Cunningham
@PadraicCunningham Cunningham,您能再次查看我的问题吗?我刚刚编辑了它。 谢谢。 - Fahadkalis
1
考虑交换私钥,这样密码提示甚至都不会出现? - inspectorG4dget
@inspectorG4dget,您能指导我如何以便捷的方式完成吗? - Fahadkalis
尝试使用此链接:http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/ - inspectorG4dget
你可以在任何一台机器上运行rsync 作为守护进程,并使用类似rsync -rav rsync://pi@192.168.2.34/python ~/的命令。这可能在您特定的情况下是可行的,也可能不是。 - deStrangis
3个回答

3

您可以通过交换私钥来实现这一点。这样,您就可以在不提示密码的情况下从直接连接的Linux机器获取文件。以下是交换私钥的步骤:

  1. Execute command ssh-keygen on your Ubuntu terminal.
  2. Keep on pressing enter until something like this shows up:

    The key's randomart image is:
    +--[ RSA 2048]----+
    |          .    .*|
    |         . +   +o|
    |          + * + .|
    |         o E * * |
    |        S + + o +|
    |         o o o   |
    |          . . .  |
    |                 |
    |                 |
    +-----------------+
    
  3. After that execute ssh-copy-id pi@192.168.2.34 and enter password i.e., raspberry, if that is the password for the other machine.

现在正常执行Python脚本,它不会提示输入密码。
import os
os.system("echo 'hello world'")
os.system("rsync -rav pi@192.168.2.34:python ~/")

1
你可以尝试使用pexpect和subprocess,pexpect应该一定能用,subprocess我不确定。
cmd = "rsync -rav pi@192.168.2.34:python ~/"
from pexpect import *

run(cmd,events={'(?i)password':'your_password\r'})

from subprocess import PIPE,Popen
cmd = "rsync -rav pi@192.168.2.34:python ~/"
proc = Popen(cmd.split(),stdin=PIPE)
proc.stdin.write('your_pass\r')
proc.stdin.flush()

如果您没有安装pexpect,请使用pip install pexpect进行安装。

1
如果您在私人网络上(地址应为192.168. ),并且信任该网络上的所有IP地址(意味着未经授权的用户无法使用 IP),则还可以使用基于主机的身份验证。
从ssh手册中提取(我假设您将其用作rsync的底层协议):
基于主机的身份验证的工作方式如下:如果用户登录的计算机在远程计算机的/etc/hosts.equiv或/etc/shosts.equiv中列出,并且双方的用户名相同,或者如果用户在远程计算机上的主目录中存在文件~/.rhosts或~/.shosts,并且其中包含一行包含客户端计算机名称和该计算机上用户名称的名称,则该用户被视为登录。
也就是说,您需要在pi的主目录中放置一个名为.shosts的文件,其中包含一行。
name_or_ip_address_of_source_machine    user_name_on_source_machine

如果文件已经存在,只需添加该行。
但是......您必须理解,对于BHAT IRSHAD的解决方案,它意味着您现在可以作为用户pi无需密码在目标机器上传递任何命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接