使用 ssh-add 添加 ssh 密钥时滥用 shell 内置函数

Misuse of shell builtins when adding an ssh key using ssh-add

我有一个 script.sh 文件,用于检查加载的 SSH 代理并添加一个密钥。

如果我直接 运行 这个脚本,它可以工作,但是如果我 运行 通过一些工作人员,它不会,除非我做这些更改:

这个有效:

#!/bin/bash -e

printf "<<<<< Start SSH agent and Github deploy key >>>>>\n"
if ps -p $SSH_AGENT_PID > /dev/null
then
  printf "<<<<< ssh-agent is already running >>>>>\n"
else
  eval `ssh-agent -s`
fi
ssh-add $deploy_key_path

但他的不起作用:

#!/bin/bash -e

if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
  printf "<<<<< ssh-agent is already running >>>>>\n"
else
  eval `ssh-agent -s`
fi
ssh-add $deploy_key_path

错误显示 ...failed. Exit Code: 2(Misuse of shell builtins).. 发生在行 ssh-add $deploy_key_path

检查 reserved Bash error codes 时,我看到:

2   Misuse of shell builtins    empty_function() {} Missing keyword or command

这是我使用 ssh-agentssh-add 的一种合理方式,通过不让密钥解锁超过脚本中严格需要的时间来最大限度地降低安全风险。

#!/usr/bin/env sh

# Do not leave key unlocked after execution of this script
trap 'ssh-add -d "$deploy_key_path"' EXIT INT

# If ssh-agent has an auth socket or has a PID
if [ -S "$SSH_AUTH_SOCK" ] || ps -p "$SSH_AGENT_PID" >/dev/null 2>&1; then
  printf '<<<<< ssh-agent is already running >>>>>\n'
else
  # Do not use back-ticks as it is legacy obsolete
  eval "$(ssh-agent -s)"
fi

# Do not leave key unlocked more than 5 minutes
ssh-add -t 600 "$deploy_key_path"