Ssh-agent neden şifrelenmemiş anahtarımı daha sonra kullanmak üzere kaydetmiyor?


12

Başsız Ubuntu sunucumuzdan başka bir sunucuya her SSH yaptığımda anahtar dosyama şifre soruluyor. Daha önce sunucuya bağlanmış olsam bile.

Bunun neden olabileceğine dair bir fikrin var mı? ssh-agentŞu anda çalışmamak kadar basit bir şey veya bir şey olabilir.

Ubuntu Gnome masaüstümdeki aynı anahtar iyi çalışıyor. Hem sunucu hem de masaüstü Ubuntu 10.10 çalıştırıyor.

ps -ef | grep '[s]sh-agent'
simon     3219     1  0 12:46 ?        00:00:00 ssh-agent

1
İlk olarak, dediğin gibi, çalışıp ssh-agentçalışmadığını kontrol et :ps -ef | grep '[s]sh-agent'
Scott Severance

@mssever Yep gibi görünüyor. Güncellenmiş soruya bakın.
Treffynnon

Yanıtlar:


10

Aracı çalışıyor olsa bile, belirli ortam değişkenleri ayarlanmamışsa, aracıya başvurunuz yoktur. Ayrıca, hepsi tamam olsa bile, aracı ve değişkenler, kimlik aracıya otomatik olarak gönderilmez: bu ssh-askpasssadece X oturumlarında çalışmak için bir görevdir .

Bash kullanıyorsanız, ~/.bash_profilebu içeriğe sahip dosyayı oluşturun :

# File: ~/.bash_profile

# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
  . ~/.profile
fi

# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
  echo "Starting ssh agent"
  eval $(ssh-agent -s)
  agent_started=1
fi

# ssh become a function, adding identity to agent when needed
ssh() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/ssh "$@"
}
export -f ssh

# another example: git
git() {
  if ! ssh-add -l >/dev/null 2>&-; then
    ssh-add ~/.ssh/id_dsa
  fi
  /usr/bin/git "$@"
}
export -f git

~/.ssh/id_dsaihtiyaçlarınızı izleyerek dosya adını değiştirin ve bu satırı~/.bash_logout

# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
  echo "Killing ssh agent"
  ssh-agent -k
fi

Son bir not: bu bir gnome oturumuna müdahale etmez, çünkü bu durumda sadece ~/.profilekaynaklanır ve ssh-askpassbir parola isteyen ve ssh-agent.


Teşekkürler @enzotib sshdiğer makinelere girmek için harika eserleri . Ancak githalka açık bir havuzu itmek veya çekmek için kullanılmaz . Bunu nasıl çözebileceğime dair bir fikrin var mı?
Treffynnon

Benzer bir işlev ekleyin ssh(), çağırın git()ve son satırı yerine olarak /usr/bin/sshdeğiştirin /usr/bin/git. Ayrıca, ile bir son satır ekleyin export -f git.
enzotib

@enzotib Bunu denedim, ancak şimdi kurulumda oluşturduğunuz dosya sshile makineye girdiğimde bash_profileanahtarın şifresini istiyor. Nedense şimdi her ssh zaman ben idam önce bile sorar sshya git. Sorun teşkil eden makineye giriş yaptığımda geri aldığım istemi için gist.github.com/942082 adresine bakın .
Treffynnon

@Treffynnon: Tam olarak nasıl gitetkileşim kurduğumu bilmiyorum sshve kullanamıyorum, gitböylece deneyemiyorum. Önceki açıklamamın açık olduğundan emin olmak için yukarıda bahsettiğim işlevi ~/.bash_profileiçerecek şekilde değiştirdim git(). Ayrıca, sunucu makinesini değiştirdiğinizi gösterdiğiniz çıktıdan görünüyor, ancak tüm önerilerim yalnızca istemci makineye yönlendirildi.
enzotib

@enzotib Doğru. Oturum açtığım sunucu git, merkezi bir forge / depoya bastığımda istemcim olur , böylece dosya doğru yerde olur. Sanırım bana ipuçlarını verdin / düşüncelerimi koştun. Git git görüntüler özel bir bash istemi var pwd. Bahse girerim bash isteminde render stat gitmeden önce bash giriş şifre isteğini tetikleyen budur!
Treffynnon

2

Son zamanlarda ssh-ident kullanmaya başladım:

https://github.com/ccontavalli/ssh-ident

tek yapmanız gereken şunun gibi bir şey eklemek:

alias ssh="/path/to/ssh-ident"

sizin .bashrc. Alternatif olarak ve ln -s /path/to/ssh-ident ~/bin/sshöncesinde PATH'nizde veya başka bir dizinde yapabilirsiniz ./bin/usr/bin


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.