【问题标题】:How do I pull from git on boot using Ubuntu (systemd), Github and SSH keys如何使用 Ubuntu (systemd)、Github 和 SSH 密钥在启动时从 git 中提取
【发布时间】:2020-05-21 08:39:45
【问题描述】:

我已经设置好了,所以我使用 ssh 密钥在 Github 上进行身份验证。我已经尝试了一切,它似乎正在工作。所以现在我希望我的应用程序在每次计算机启动时都运行,所以我创建了以下 systemd 配置...

[Unit]
Description=Job that runs your user script

[Service]
WorkingDirectory=/.../web/site
ExecStart=npm start
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

一切似乎又正常了。现在我想在每次启动之前拉动,所以我改为...

[Unit]
Description=Job that runs your user script

[Service]
WorkingDirectory=/.../web/site
ExecStart=git pull
ExecStart=npm start
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

但现在它失败了......

Mar 08 05:45:21 debdev systemd[1]: Starting Job that runs your user script...
Mar 08 05:45:21 debdev git[731]: Host key verification failed.
Mar 08 05:45:21 debdev git[731]: fatal: Could not read from remote repository.
Mar 08 05:45:21 debdev git[731]: Please make sure you have the correct access rights
Mar 08 05:45:21 debdev git[731]: and the repository exists.
Mar 08 05:45:21 debdev systemd[1]: node-site.service: Main process exited, code=exited, status=1/FAILURE
Mar 08 05:45:21 debdev systemd[1]: node-site.service: Failed with result 'exit-code'.
Mar 08 05:45:21 debdev systemd[1]: Failed to start Job that runs your user script.

我错过了什么?是因为我的 SSH 密钥在我的用户名下吗?我可以制作一个“root”ssh 密钥吗?

【问题讨论】:

    标签: git ubuntu github


    【解决方案1】:

    这个:

    Host key verification failed.
    

    是验证远程存储库的问题,在你的情况下是 Github。这很可能是因为当系统启动时,您是以 root 而不是您的普通用户运行的,这就是您设置密钥对时的身份。要解决此问题,您可以直接指定身份文件。要以一种一次性的方式执行此操作,并且不为您的根添加第二个身份文件(您可以这样做,也不需要太多努力,就像您为您的用户所做的那样),您可以改为运行

    ssh-agent bash -c 'ssh-add /path/to/id_rsa; git pull'
    

    为了在您修复此问题时不重新启动/重新启动服务,我建议您尝试以 root 身份修复 git pull 命令,然后在您的 systemd 中尝试。

    【讨论】:

      【解决方案2】:

      您需要启动 ssh-agent 并添加您的密钥

      1. 在引导时启动 ssh-agent: https://stackoverflow.com/a/38980986/13475540
      2. 在你的服务单元文件中,添加这个

        [Unit]
        After=ssh-agent.service
        
        [Service]
        Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
        ExecStartPre=/usr/bin/ssh-add [your_key_file]
        

      【讨论】:

      • 这是[your_key_file]id_rsa 的路径吗?
      • 是的,它是您的私钥文件的路径。
      【解决方案3】:

      为此,我创建了一个新的无密码 SSH 密钥,并将其作为 read-only deploy key 添加到我的存储库中。

      我在从通过systemd 单元触发的脚本启动时从存储库中提取时使用此 SSH 密钥。

      在我的脚本中发出git pull 命令之前,我启动ssh-agent 并应用只读密钥:

      eval `ssh-agent -s`
      ssh-add path/to/key
      

      这使得从存储库中提取最新更改成为可能。无密码的 SSH 带来了一些风险,但我觉得很舒服,因为密钥是只读的并且仅限于此 repo。

      【讨论】:

        猜你喜欢
        • 2022-10-07
        • 1970-01-01
        • 2015-10-22
        • 2019-12-07
        • 2012-08-11
        • 2012-06-19
        • 1970-01-01
        • 2019-07-24
        • 2012-06-21
        相关资源
        最近更新 更多