假设我不能用Fabric运行这样的东西:
run("svn update --password 'password' .")
如何以正确的方式传递给远程交互命令行的Fabric密码?
问题是repo被签出为svn + ssh并且我没有http / https / svn选项
答案 0 :(得分:7)
尝试SSHkey。它允许您无需密码即可连接到服务器。 在这种情况下,您必须在远程服务器和存储库之间设置一个sshkey。
在远程服务器上:生成密钥对
$ ssh-keygen -t dsa
将passphase留空! 这将生成2个文件
然后,将id_dsa.pub中的内容追加到repo服务器上的〜/ .ssh / authorized_keys。
您的远程服务器将无需任何密码即可更新源树。
答案 1 :(得分:3)
如果您只想在日志中隐藏密码,可以使用以下内容:
from fabric.state import output
def xrun(command, hidden='', *args, **kwargs):
old_state = output.running
output.running = False
print '[%s] run: %s' % (env.host_string, command)
run(command + hidden, *args, **kwargs)
output.running = command
xrun('svn update', '--password "your password"')
答案 2 :(得分:2)
我们遇到了类似于此问题的问题,实际上为Fabric提出了一项新功能,但我们采访过的开发人员建议使用它。
import getpass
password = getpass.getpass('Enter SVN Password: ')
run("svn update --password '%s'" % password)
当结构运行此命令时,这将提示您输入密码。
我相信会在结构日志中显示您的密码,因此更好的选择是让SVN提示您输入密码并将密码反映到其中。
run('echo %s | svn update --password' % password)
我不使用SVN,所以我担心我不确定这是否可行。我希望其他人可以帮助那里!
答案 3 :(得分:2)
我自动化交互式命令行的标准答案是“使用Expect”,但是你使用的是Python,所以我会稍微改进一下“使用Pexpect”。
可能需要一些考虑将Pexpect集成到Fabric中,或者您可能最终会因为这种特殊情况而单独回到Pexpect。但这绝对是我的方式。
答案 4 :(得分:0)
您可能还需要为用户提供服务?如果没有,您可能会更好地导出您的仓库并在服务器上上传+部署它(本地)的tar。如果您在本地运行svn命令,则可以提示您输入用户名和/或密码。
答案 5 :(得分:0)
你应该看一下Fabric's env documentation。有人说你应该做这样的事情:
from fabric.api import env
env.user = 'your_user'
env.password = 'your_password'
希望它有所帮助!