travis-ci - ssh-add 询问我的密码

问题描述 投票:0回答:3

我正在致力于与 Travis CI 的持续集成。 这是我的配置:

before_install:
  - echo -e "Host *\n\tStrictHostKeyChecking no\n" > ~/.ssh/config
  - echo -e $id_rsa.pub > ~/.ssh/id_rsa.pub
  - echo -e $id_rsa > ~/.ssh/id_rsa
  - sudo chmod 600 ~/.ssh/*
  - sudo chmod 644 ~/.ssh/config
  - eval `ssh-agent -s`
  - ssh-add ~/.ssh/id_rsa
  ...

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/travis/.ssh/id_rsa: 

在 ssh-add 步骤中,它询问我密码并停止部署。我已经使用其他不带密码的 ssh 密钥进行了测试,但它不能解决我的问题。

我已经测试了很多解决方案,例如

yes $MY_PASSWORD | ssh-add ~/.ssh/id_rsa
echo "$MY_PASSWORD" | ssh-add ~/.ssh/id_rsa
,但它不起作用。

我已添加到我的 .ssh/config(您可以在我的配置中看到它):

Host *
    StrictHostKeyChecking no

不是应该让它不要问我密码吗?

也许有人有主意? 谢谢:)

linux ssh continuous-integration debian travis-ci
3个回答
0
投票

您正在使用加密的私钥(这很好),但它需要密码(这对脚本编写不利)。您可以继续以下几种可能性:

  • 从密钥中删除密码并使用未加密的(不太安全)

    ssh-keygen -p -P "old_passphrase" -N "" -f ~/.ssh/id_rsa
    
  • 使用

    sshpass
    工具解锁密钥(将密码短语存储在脚本中的密钥旁边基本上破坏了加密密钥的安全性)

    sshpass -p passphrase ssh-add ~/.ssh/id_rsa
    

0
投票

我已经解决了我的问题。 我在环境变量和 echo 的基本使用方面遇到了不同的问题。

  • 我的环境变量名称不好。 travis 中的“$id_rsa.pub”由 $id_rsa 解释。 “.pub”,因此它在我的内容中添加了一些错误的字符。我将其重命名为 id_rsa_pub。

  • 我忘记将“”转换为“\”,将换行符转换为“ " 对于 travis 和他的环境变量,你必须写 "\n" 而不是 " ”.

我的问题部分是因为 ssh 文件损坏,并且因为我使用带有密码的 rsa 密钥。就我而言,密码并不重要,所以我删除了它。 为此,我使用 jakuje 的答案。我的 ssh 密钥现在已在每个版本中正确安装。

谢谢您的帮助!


0
投票

你可以做

before_install:
    - [...]
    - chmod 600 ~/.ssh/id_rsa
    - chmod 700 local-ssh-askpass
    - eval `ssh-agent -s`
    - DISPLAY=1 SSH_ASKPASS_REQUIRE=force SSH_ASKPASS=./local-ssh-askpass ssh-add ~/.ssh/id_rsa < /dev/null

不要忘记设置:

  • DISPLAY=1 强制本地询问脚本
  • 从 /dev/null 重定向输入
  • local-ssh-askpass 脚本中的任何 echo 密码
© www.soinside.com 2019 - 2024. All rights reserved.