我想写一个脚本,将告诉另一个服务器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
请查看作为pyexpect项目一部分的pxsh模块:
https://pexpect.readthedocs.org/en/latest/api/pxssh.html
它简化了将ssh自动化到机器中的处理。在
这是SSH的一个问题。在
这意味着ssh无法登录。您的ssh代理没有加载正确的密钥,您以不同的用户身份运行脚本,或者环境没有正确传递。检查变量
SSH_AUTH_SOCK
和SSH_AGENT_PID
是否传递给python脚本的子进程。在此错误表示ssh不知道远程主机。这意味着在文件
$HOME/.ssh/known_hosts
中找不到主机密钥。同样,确保您正在检查脚本的有效用户的主目录。在[编辑]当您运行脚本时,python将成为ssh的“输入”:ssh不再连接到控制台,并将要求python输入登录密码。由于python不知道ssh想要什么,所以它忽略了请求。宋承宪试了三次就死了。在
要解决此问题,请在运行Python脚本之前运行以下命令:
将
path-to-your-private-key
替换为私钥的路径(用于登录的私钥)。ssh-add
将询问您的密码,ssh代理将把它保存在一个安全的地方。它还将修改您的环境。所以下次SSH运行时,它会注意到SSH代理正在运行,并首先询问它。由于ssh代理知道密码,ssh将登录而不会影响Python。在要解决第二个问题,请手动运行第二个ssh命令一次。然后ssh会将第二个主机添加到它的文件中,不再询问。在
[EDIT2]有关如何使用私钥通过ssh登录远程服务器的详细说明,请参见this howto。在
我想这和ssh有关。您是否使用公钥自动连接。我认为您的shell知道这个键,但python不是这样。在
只是我不确定。我希望有帮助
相关问题 更多 >
编程相关推荐