Bash script

#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, но сейчас это работает — спасибо за ваше краткое объяснение