В ssh-agent
и последних версиях OpenSSH все просто:
Запустите обычный ssh-agent
с таймаутом по умолчанию для добавленных ключей (например, 60 минут):
eval `ssh-agent -t 60m`.
Настройте ваш ssh
для добавления фактически используемых ключей в агент. Добавьте новую строку в ~/.ssh/config`:
AddKeysToAgent yes
Эта возможность появилась в последней версии OpenSSH 7.2. В предыдущих версиях вам нужно было добавлять ключ в агент вручную, если превышался таймаут, но это можно довольно просто автоматизировать с помощью функции bash, примерно так:
ssh() {
/bin/ssh -o BatchMode=yes $* || \
ssh-add path/to/the-key && /bin/ssh $*
}
Идея: Попробуйте подключиться с помощью ключа в пакетном режиме (не будет запрашиваться парольная фраза и произойдет сбой, если ключа нет), а при неудаче добавьте ключ в агент и повторно выполните команду ssh.
Вместо bicon.bin
попробуйте exec bicon.bin
, возможно, с аргументами для запуска оболочки в качестве оболочки входа.
Когда вы запускаете bicon.bin
, он порождает оболочку, поэтому теперь у вас есть (1) исходная оболочка, (2) bicon.bin
и (3) оболочка, порожденная bicon.bin
. С exec
исходная оболочка заменяется на bicon.bin
.
Первое, что нужно понять, что bicon - это виртуальная оболочка, поэтому вам нужно дважды выйти: один из bicon и один из bash.
Таким образом, чтобы избежать двойного выполнения команды .bashrc, вы должны поместить команду, включающую bicon, в начало .bashrc.
Также, чтобы избежать двойного выхода, вы можете сделать:
alias exit='kill -9 $(ps -p $PPID -o ppid=)'