Чи є зручний спосіб переконатися, що всі логіни від певного користувача (тобто мене) використовують один і той же ssh-агент? Я зламав сценарій, щоб зробити цю роботу більшу частину часу, але я підозрював, що існує якийсь спосіб зробити це, що я щойно пропустив. Крім того, з того часу відбулися дивовижні досягнення в галузі обчислювальної техніки, як, наприклад, цей веб-сайт.
Отже, мета тут така
- щоразу, коли я входжу в поле, незалежно від того, чи це через SSH, або в графічному сеансі, розпочатому з gdm / kdm / тощо, або на консолі:
- якщо моє ім'я користувача зараз не
ssh-agent
працює, воно запускається, експортуються змінні середовища таssh-add
викликаються. - в іншому випадку, існуючі координати агента експортуються в змінні середовища сеансу входу.
- якщо моє ім'я користувача зараз не
Цей засіб особливо цінний, коли розглянутий блок використовується як точка ретрансляції під час ssh
переходу у третю коробку. У цьому випадку уникнути необхідності вводити парольну фразу приватного ключа кожен раз, коли ви впадаєте в систему, а потім хочете, наприклад, зробити git push
щось чи щось.
Сценарій, наведений нижче, робить це здебільшого надійно, хоча останнім часом він вийшов з ладу, і тоді я розпочав ще один графічний сеанс. Можливо, в цьому випадку виникала інша дурість.
Ось мій сценарій погано-добре Я джерело цього від мого .bashrc
.
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; then
SSH_AGENT_PID=`ps -fC ssh-agent |grep 'etc/ssh/ssh-agent-socket' |sed -r 's/^\S+\s+(\S+).*$/\1/'`;
if [[ $SSH_AGENT_PID =~ [0-9]+ ]]; then
# in this case the agent has already been launched and we are just attaching to it.
##++ It should check that this pid is actually active & belongs to an ssh instance
export SSH_AGENT_PID;
SSH_AUTH_SOCK=~/etc/ssh/ssh-agent-socket; export SSH_AUTH_SOCK;
else
# in this case there is no agent running, so the socket file is left over from a graceless agent termination.
rm ~/etc/ssh/ssh-agent-socket;
ssh-procure-launch-agent;
fi;
else
ssh-procure-launch-agent;
fi;
fi;
Скажіть, будь ласка, є кращий спосіб зробити це. Також, будь ласка, не вибирайте невідповідності / гафі (наприклад, вкладаючи var
речі etc
); Я писав це деякий час тому і з того часу багато чого навчився.