无法用Python编写“svn export”脚本

2024-04-27 04:02:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个脚本,将告诉另一个服务器SVN导出一个SVN存储库。在

这是我的python脚本:

import os

# svn export to crawlers
for s in ['work1.main','work2.main']:
    cmd = 'ssh %s "cd /home/zes/ ; svn --force export svn+ssh://174.113.224.177/home/svn/dragon-repos"' % s
    print cmd
    os.system(cmd)

很简单。它将ssh到work1.main,然后cd到一个正确的目录。然后调用SVN export命令。在

但是,当我运行这个脚本时。。。在

^{pr2}$

为什么我得到这个错误而不能导出目录?我可以在命令行中手动键入命令,它将工作。为什么不能在剧本里起作用?在

如果我改成这个…就不行了。相反,什么也不会发生。在

cmd = 'ssh %s "cd /home/zes/ ;"' % s

Tags: 命令服务器目录脚本cmdhomeosmain
3条回答

请查看作为pyexpect项目一部分的pxsh模块:

https://pexpect.readthedocs.org/en/latest/api/pxssh.html

它简化了将ssh自动化到机器中的处理。在

这是SSH的一个问题。在

Permission denied, please try again.

这意味着ssh无法登录。您的ssh代理没有加载正确的密钥,您以不同的用户身份运行脚本,或者环境没有正确传递。检查变量SSH_AUTH_SOCKSSH_AGENT_PID是否传递给python脚本的子进程。在

Host key verification failed.

此错误表示ssh不知道远程主机。这意味着在文件$HOME/.ssh/known_hosts中找不到主机密钥。同样,确保您正在检查脚本的有效用户的主目录。在

[编辑]当您运行脚本时,python将成为ssh的“输入”:ssh不再连接到控制台,并将要求python输入登录密码。由于python不知道ssh想要什么,所以它忽略了请求。宋承宪试了三次就死了。在

要解决此问题,请在运行Python脚本之前运行以下命令:

eval $(ssh-agent)
ssh-add path-to-your-private-key

path-to-your-private-key替换为私钥的路径(用于登录的私钥)。ssh-add将询问您的密码,ssh代理将把它保存在一个安全的地方。它还将修改您的环境。所以下次SSH运行时,它会注意到SSH代理正在运行,并首先询问它。由于ssh代理知道密码,ssh将登录而不会影响Python。在

要解决第二个问题,请手动运行第二个ssh命令一次。然后ssh会将第二个主机添加到它的文件中,不再询问。在

[EDIT2]有关如何使用私钥通过ssh登录远程服务器的详细说明,请参见this howto。在

我想这和ssh有关。您是否使用公钥自动连接。我认为您的shell知道这个键,但python不是这样。在

只是我不确定。我希望有帮助

相关问题 更多 >