【问题标题】:SSH for Bash Script (SSH-Agent)用于 Bash 脚本的 SSH(SSH 代理)
【发布时间】:2016-04-19 12:12:59
【问题描述】:

不确定这是否是重复的问题,但我真的找不到任何解决问题的方法。

问题是我无法运行以下命令。

#!/bin/bash
SCRIPT1="cd /path/to/project;"
SCRIPT2="git pull;"
ssh "production" ${SCRIPT1} "ssh-agent /bin/bash; ssh-add ~/.ssh/my_bitbucket_key;" ${SCRIPT2}

仍然是 bash 和 ssh 的新手,所以我也不确定这是否是正确的做法。

希望你能帮助我。谢谢!

【问题讨论】:

  • 该命令是否对其他人有效但对您无效,或者它从未对任何人有效?如果它对您不起作用,您会收到什么错误消息?如果它对任何人都不起作用,我会尝试将 $SCRIPT1 和 $SCRIPT2 都放在 ssh 命令的双引号内。
  • 将第一行更改为 #!/bin/bash -vx 以查看每个 cmd 中发生的变量替换。我想你会看到问题的。不要混淆所有字符串现在都在以+ 开头的行上单引号。这就是调试器“规范化”其输入的方式。祝你好运。
  • 顺便说一句,将远程命令放在变量中是可疑的做法。也许改为创建一个在远程 shell 中运行其参数的函数,例如 prod "cd /path/to/project; git pull 其中 prod 可能类似于 prod () { ssh production ssh-agent bash -c "ssh-add ~/.ssh/my_bitbucket_key; $@"; }
  • '$@' 是什么意思?

标签: linux bash ubuntu ssh bitbucket


【解决方案1】:

您的脚本的问题是您正在启动ssh-agent 运行bash 的新实例。执行您的命令的 Bash 无权访问此代理。相反,你想要

ssh "production" "${SCRIPT1}
    eval \$(ssh-agent)
    ssh-add ~/.ssh/my_bitbucket_key
    ${SCRIPT2}"

eval 之后的美元符号必须转义,因为未转义的美元符号将在启动 ssh 命令之前由本地 shell 评估。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2021-01-10
    • 2021-04-27
    • 2011-01-15
    • 2016-01-12
    相关资源
    最近更新 更多