#linux #bash #ssh #scripting
#linux #bash #ssh #сценарии
Вопрос:
Только что получил новую работу и хочу иметь возможность легко переключаться между моими рабочими / личными учетными записями на github. Я знаю, что есть много решений для этого, но это не мой вопрос (хотя любые простые и облегченные решения приветствуются).
Если я напишу следующее в свой терминал, это удалит все мои текущие SSH-ключи из агента и позволит избежать любого конфликта:
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa_work
Затем я могу запустить ssh-add -l, и в нем будет указан только один ключ RSA (мой рабочий ключ). Обычно у меня есть 4 в агенте, который вызывает конфликты. Но с этим это здорово, я могу легко использовать свой рабочий github без проблем.
Чтобы избежать необходимости вырезать и вставлять или печатать его каждый день, я попытался поместить его в bash-скрипт. Скрипт, похоже, работает, и он отображает те же сообщения, как если бы я ввел его прямо в терминал (PID агента и перечисляет только один ключ и т.д.), Но если я запускаю ssh-add -l после, он отображает все 4 ключа ssh и вызывает у меня тот же конфликт.
Так почему же это? Скрипт bash не влияет на файлы за его пределами или что-то в этом роде? Есть ли какая-то проблема с областью действия или разрешениями, о которых я не знаю? Вот мой скрипт:
#!/bin/bash
eval `ssh-agent -s`
ssh-add -D
ssh-add ~/.ssh/id_rsa_work
Ответ №1:
Скрипт вызывается в подоболочке, которая не влияет на текущую оболочку. Вызовите скрипт, чтобы он выполнялся в вашей текущей оболочке:
. my_ssh_script.sh
Комментарии:
1. Мне пришлось использовать «source» вместо сокращения «.» по какой-то причине в моей системе Ubuntu, но сейчас это работает — спасибо за ваше краткое объяснение