Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将脚本写入到";“svn出口”;用Python_Python_Linux_Svn_Unix - Fatal编程技术网

无法将脚本写入到";“svn出口”;用Python

无法将脚本写入到";“svn出口”;用Python,python,linux,svn,unix,Python,Linux,Svn,Unix,我想写一个脚本,告诉另一台服务器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.sys

我想写一个脚本,告诉另一台服务器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)
eval $(ssh-agent)
ssh-add path-to-your-private-key
很简单。它将ssh到work1.main,然后cd到正确的目录。然后调用SVN导出命令

但是,当我运行此脚本时

$ python export_to_crawlers.py
ssh work1.main "cd /home/zes/ ; svn --force export svn+ssh://174.113.224.177/home/svn/dragon-repos"
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
svn: Connection closed unexpectedly
ssh work2.main "cd /home/zes/ ; svn --force export svn+ssh://174.113.224.177/home/svn/dragon-repos"
Host key verification failed.
svn: Connection closed unexpectedly
为什么我会出现此错误并且无法导出目录?我可以在命令行中手动键入命令,它会工作的。为什么它不能在脚本中工作

如果我改成这个…它将不起作用。相反,什么也不会发生

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

我猜这与ssh有关。您是否使用公钥自动连接。我认为您的shell知道这个键,但python的情况并非如此


我不确定,但这只是一个想法。我希望它能有所帮助这是SSH的一个问题

权限被拒绝,请重试

这意味着ssh无法登录。您的ssh代理没有加载正确的密钥,您正在以其他用户的身份运行脚本,或者环境没有正确传递。检查变量
SSH\u AUTH\u SOCK
SSH\u AGENT\u PID
是否传递到python脚本的子进程

主机密钥验证失败

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

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

要解决此问题,请在运行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)
eval $(ssh-agent)
ssh-add path-to-your-private-key
将私钥的路径替换为私钥的路径(用于登录的路径)
ssh add
会询问您的密码,ssh代理会将其保存在一个安全的地方。它还将修改您的环境。因此,当SSH下次运行时,它会注意到SSH代理正在运行,并首先询问它。由于ssh代理知道密码,ssh将在不打扰Python的情况下登录

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


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

查看pyexpect项目中的pxssh模块:


它简化了将ssh自动化到计算机中的过程。

看起来ssh失败了,您是否尝试过运行“ssh%s”cd/home/zes/;svn—强制导出svn+ssh://174.113.224.177/home/svn/dragon-repos“手动?是的,我尝试过在终端本身的命令行中分别运行这两个命令。它可以工作。您考虑过使用比python更好的工具吗?例如,”expect“是专门为这些类型的问题设计的。如果为您的特殊目的任务使用特殊目的工具,您的运气可能会更好。如何解决“权限被拒绝,请重试”问题?“传递到python脚本的子进程”是什么意思?感谢远程端需要密码。手动运行命令时,如何将其传递给ssh?首先,我将ssh转换为work1.main。然后,我将cd放入目录中。然后我粘贴“svn——强制导出svn”+ssh://174.113.224.177/home/svn/dragon-repos“一旦发生这种情况,它将要求我输入SVN服务器的密码。当这种情况发生时,我输入密码,它将导出。这是我手动操作的时候。嗨,亚伦。我做了那些步骤。而且好像是加上去的。“添加的标识:/home/zes/.ssh/id_dsa(/home/zes/.ssh/id_dsa)”这是ssh添加后的输出。现在,当我运行脚本时…同样的事情发生了?您是使用密码还是私钥登录?ssh是询问您的密码还是远程用户的密码?