Czy istnieje wygodny sposób, aby upewnić się, że wszystkie dane logowania od danego użytkownika (tj. Mnie) używają tego samego agenta ssh? Wyhakowałem scenariusz, aby większość czasu działała, ale przez cały czas podejrzewałam, że jest jakiś sposób, żeby to przegapić. Ponadto od tego czasu nastąpił niesamowity postęp w technologii komputerowej, na przykład ta strona internetowa.
Więc celem jest to
- za każdym razem, gdy loguję się do skrzynki, niezależnie od tego, czy odbywa się to przez SSH, czy w sesji graficznej rozpoczętej z gdm / kdm / etc lub na konsoli:
- jeśli moja nazwa użytkownika nie ma obecnie
ssh-agent
uruchomionej, jedna jest uruchamiana, zmienne środowiskowe są eksportowane issh-add
wywoływane. - w przeciwnym razie współrzędne istniejącego agenta są eksportowane do zmiennych środowiskowych sesji logowania.
- jeśli moja nazwa użytkownika nie ma obecnie
Ta funkcja jest szczególnie cenna, gdy dane pudełko jest używane jako punkt przekaźnikowy podczas ssh
wchodzenia do trzeciego pudełka. W takim przypadku unika się konieczności wpisywania hasła klucza prywatnego za każdym razem, gdy ssh jest wpisywane, a następnie chcemy na przykład zrobić git push
coś lub coś.
Skrypt podany poniżej robi to głównie niezawodnie, chociaż ostatnio spartaczył się, gdy X się zawiesił, a następnie rozpocząłem kolejną sesję graficzną. W tym przypadku mogło się zdarzyć coś innego.
Oto mój zły scenariusz. Pozyskuję to z mojego .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;
Powiedz mi, że jest lepszy sposób, aby to zrobić. Proszę również nie dręczyć niespójności / gaf (np. Wkładanie var
rzeczy etc
); Napisałem to jakiś czas temu i od tego czasu nauczyłem się wielu rzeczy.