Belirli bir kullanıcıdan (yani ben) gelen tüm girişlerin aynı ssh-agent'ı kullanmasını sağlamanın uygun bir yolu var mı? Çoğu zaman bu işi yapmak için bir senaryoyu hackledim, ama başından beri ıskalamamın bir yolu olduğundan şüphelendim. Ek olarak, o zamandan beri, örneğin bu web sitesi gibi, bilgisayar teknolojisinde inanılmaz gelişmeler oldu.
Yani burada amaç bu
- ne zaman ister SSH üzerinden, ister gdm / kdm / etc'den başlayan bir grafik oturumda veya bir konsolda kutuya giriş yaptığımda:
- eğer kullanıcı adım şu anda
ssh-agent
çalışıyorsa, biri başlatılır, ortam değişkenleri dışa aktarılır vessh-add
çağrılır. - Aksi halde, mevcut aracının koordinatları giriş oturumunun ortam değişkenlerinde dışa aktarılır.
- eğer kullanıcı adım şu anda
Bu tesis, söz konusu kutunun ssh
üçüncü bir kutuya girerken geçiş noktası olarak kullanılması durumunda özellikle değerlidir . Bu durumda, her girişte özel anahtarın parolasını girmek zorunda kalmaz ve daha sonra, örneğin yapmak git push
veya bir şey yapmaktan kaçınır .
Aşağıda verilen senaryo bunu en güvenilir şekilde yapar, ancak X düştüğünde ve daha sonra başka bir grafik oturumu başlattığımda son zamanlarda ortaya çıktı. Bu durumda başka bir karmaşa yaşanmış olabilir.
İşte benim kötü-iyi-senaryom. Bunu benden kaynaklarım .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;
Lütfen bunu yapmanın daha iyi bir yolu olduğunu söyle. Ayrıca tutarsızlıklar / gaffes nitpick etmeyiniz (örneğin koyarak var
bir şeyler etc
); Bunu bir süre önce yazdım ve o zamandan beri birçok şey öğrendim.