我正在尝试通过结构2自动化部署。
当我手动通过远程服务器上的命令行执行git pull时,一切正常。
[当我尝试对Fabric / Invoke脚本执行相同操作时,它不允许我拉出。
尽管它确实允许我执行git status和其他命令。
# Imports
from fabric import Connection
from fabric.tasks import task
import os
# Here i pass my local passphrase:
kwargs = {'passphrase': os.environ["SSH_PASSPHRASE"]}
@task
def serverdeploy(c, branch="Staging"):
con = Connection('myuser@myhost', connect_kwargs=kwargs)
with con.cd("/home/user/repository/"):
# Activate the virtual environment:
with con.prefix("source ENV/bin/activate"):
con.run("git pull origin {}".format(branch))
结果是:
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
[我什至在拉动时都没有要求输入密码。
我曾尝试在不激活环境的情况下进行拉动,但这也不起作用。
可能是什么问题?
感谢您抽出宝贵的时间!
请把con.run("git pull origin {}".format(branch))
放在with con.prefix("source ENV/bin/activate"):
的外面。
您的代码与解释器或虚拟环境无关!试试看,它应该可以工作!
最有可能的问题是,您以该身份登录的用户为bitbucket.org设置了正确的ssh密钥,但是结构连接用户不同。您可以通过以下两个命令来测试设置是否正确:以Fabric连接的用户身份使用以下命令:
ssh -T [email protected]
ssh -T -i /path/to/private_key [email protected]
为了解决此问题,请将私钥复制到/home/myuser/.ssh
目录,并将bitbucket.org的ssh配置项添加到/home/myuser/.ssh/config
:
Host bitbucket.org
IdentityFile /path/to/private_key