-gt
используется для сравнения чисел, а не строк. Таким образом, вам нужно заменить:
[ ${ages[i]} -gt MAX_AGE ]
на:
[ ${ages[i]} -gt $MAX_AGE ]
Причина в том, что MAX_AGE
- это строка. Вы не можете использовать ее как число.
$MAX_AGE
- это значение переменной MAX_AGE
. Вы можете сравнить его с числом, если это значение можно интерпретировать как целое число.
Для достижения наилучших результатов при использовании [...]
переменные следует заключать в двойные кавычки:
[ "${ages[i]}" -gt "$MAX_AGE" ]
Вы можете оценить и сохранить выходные данные агента ssh -одновременно,
eval $(ssh-agent | tee agent.env)
, затем с других терминалов или последующих сеансов,
source agent.env
Подтяните разрешения, чтобы сделать их более безопасными,
chmod go-rwx agent.env
Во-первых, вы делаете это через сеанс ssh? Если это так, то вы можете использовать ssh -A user@host.com
и даже не использовать агент ssh -. Опция -A
переадресует агента ssh -вашего хоста на удаленный сервер. Тогда вам даже не нужно копировать ваши ssh-ключи на удаленный сервер.
Назад к исходному вопросу :Проблема с запуском ssh-agent
заключается в том, что по умолчанию каждый раз будет использоваться другое случайное имя сокета. Что вы хотите сделать, так это использовать опцию ssh-agent -a
для предоставления фиксированного сокета. Тогда, сколько бы раз вы его ни вызывали, он не запустит другого агента ssh -.
Вот простой скрипт, который всегда будет -использовать один и тот же агент ssh -или запускать агент ssh -, если он не запущен. Вы также можете легко объединить эти 3 строки в псевдоним из 1 строки.
# set SSH_AUTH_SOCK env var to a fixed value
export SSH_AUTH_SOCK=~/.ssh/ssh-agent.sock
# test whether $SSH_AUTH_SOCK is valid
ssh-add -l 2>/dev/null >/dev/null
# if not valid, then start ssh-agent using $SSH_AUTH_SOCK
[ $? -ge 2 ] && ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null