cla*_*l3r 15 python linux git shell
我有一个最简单的脚本叫 update.sh
#!/bin/sh
cd /home/pi/circulation_of_circuits
git pull
Run Code Online (Sandbox Code Playgroud)
当我从终端呼叫这个时,./update.sh
我得到了一个已经是最新的,或者像预期的那样更新文件.
我也有一个python脚本,在scipt里面是:
subprocess.call(['./update.sh'])
当我调用相同的脚本时,我得到:
权限被拒绝(publickey).致命:无法从远程存储库读取.
请确保您具有正确的访问权限并且存储库存在.
(我使用SSH).
-----------------更新--------------------
别人看了我一眼:
好的,所以有些进展.当我启动你的图像时,我无法在你的repo目录中运行git pull,而bash脚本也会失败.这似乎是因为bitbucket存储库是私有的,需要对pull进行身份验证(我使用的那个是公共的,这就是为什么我没有问题).大概是git在你第一次输入它之后记得这个,bash不知何故欺骗git认为你随后键入命令但是从python运行它是不一样的.
我不是一个git专家,但必须有一些方法来设置它,以便python可以提供身份验证.
jim*_*imh 11
听起来你需要给你的ssh命令一个它可以访问的公钥或私钥:
ssh -i /backup/home/user/.ssh/id_dsa user@unixserver1.nixcraft.com
Run Code Online (Sandbox Code Playgroud)
-i告诉它在哪里寻找密钥
小智 6
此问题是由git repo身份验证失败引起的.你说你正在使用SSH,git抱怨publickey auth失败.通常,您可以在私有仓库上使用git命令而无需输入密码.所有这些都意味着git正在使用ssh,但在后一种情况下它无法找到正确的私钥.
由于问题仅在通过另一个脚本运行时才会显现,因此很可能是由于环境变量混乱造成的.Subprocess.call应该按原样传递环境,因此有几个常见的嫌疑:
sh -l
要么 su -
任何这些原因都可能隐藏环境变量ssh-agent(或其他一些密钥管理工具)可能需要工作.
诊断和修复的步骤:
隔离问题.
subprocess.call(['./update.sh'])
.运行update.sh和新脚本.诊断问题并相应地修复:
a)如果update.sh工作,而新脚本没有,你可能会遇到一些奇怪的系统配置错误.尝试升级你的系统和python; 如果问题仍然存在,则可能需要对受影响的系统本身进行额外调试.
b)如果update.sh和新脚本都有效,则问题在于调用shell脚本的外部python脚本.寻找的出现sudo
,su -
,sh -l
,env
和os.environ
,其中之一是最有可能的罪魁祸首.
c)如果update.sh和新脚本都不起作用,那么您的问题很可能是ssh客户端配置; 一个典型的原因是你使用的是非默认身份,没有配置它,~/.ssh/config
而是使用了ssh-add,之后,ssh-agent的缓存已过期.在这种情况下,运行ssh-add identityfile
您用于对该git repo进行身份验证的身份,然后重试.
我相信这个答案会对您有所帮助:https://serverfault.com/questions/497217/automate-git-pull-stuck-with-keychain ?answertab=votes#tab-top
我没有使用 ssh-agent 并且它有效:将您的脚本更改为以下脚本并尝试。
#!/bin/bash
cd /home/pi/circulation_of_circuits
ssh-add /home/yourHomefolderName/.ssh/id_rsa
ssh-add -l
git pull
Run Code Online (Sandbox Code Playgroud)
这假设您已正确配置 ssh 密钥。
归档时间: |
|
查看次数: |
2207 次 |
最近记录: |