【问题标题】:How to input password to a shell command 'git push' from a Jupyter Notebook?如何从 Jupyter Notebook 向 shell 命令“git push”输入密码?
【发布时间】:2018-08-11 10:23:12
【问题描述】:

我在 Jupyter Notebook 的单元格中有以下代码:

!git push origin master

这将询问我的 Github 密码,但由于我找不到输入密码的方法,因此单元继续运行。出于某种原因,我想以这种方式推送代码。

我尝试关注similar questions,但在我的情况下似乎没有任何效果。以下是我尝试过的方法,但没有成功:

import getpass
import os

password = getpass.getpass()
command = "git -S push origin master " #can be any command but don't forget -S as it enables input from stdin
os.system('echo %s | %s' % (password, command))

这是上面的日志:

unknown option: -S
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

【问题讨论】:

    标签: python linux shell ipython jupyter-notebook


    【解决方案1】:

    -Ssudo 的一个选项,而不是git...您可以看到git 甚至没有要求输入密码,它只是告诉您-S 无效。

    我相信git 使用安全的方式获取密码,从tty 读取而不是标准输入。可能很难掌握正确的tty 来输入该密码来完成这项工作。此外,这意味着您必须在笔记本中以明文形式写入密码。

    正确的处理方法是:

    • 使用ssh-keygen 生成ssh 密钥无需密码
    • 配置您的服务器以使用该密钥
    • 配置git使用SSH协议做push

    这完全避免了密码请求。

    【讨论】:

    • 好的,用纯文本书写也可以,但我该怎么做呢?将密码作为字符串传递给echo %s | %s,这也不起作用。不过我会尝试 ssh。
    • @FaizanAli 我不会提供任何相关信息,因为其他人可能认为这是个好主意,但事实并非如此。一种解决方案是修改存储库配置以使用带有凭据的repo HTTPS url。这再次避免了任何密码提示,但您在存储库配置中拥有明文凭据。查看this question on ServerFault 了解更多信息。显然,您可以从笔记本更改此配置...
    • 我通过那个 ServerFault 问题找到了使用访问令牌的解决方案,谢谢。
    猜你喜欢
    • 2020-01-24
    • 2022-01-08
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2016-09-12
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多