Juga, bersama dengan semua ini, apakah mungkin menemukan proses ssh-agent yang ada dan menambahkan kunci saya ke dalamnya?
Ya. Kami dapat menyimpan info koneksi dalam file:
# Ensure agent is running
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
# Could not open a connection to your authentication agent.
# Load stored agent connection info.
test -r ~/.ssh-agent && \
eval "$(<~/.ssh-agent)" >/dev/null
ssh-add -l &>/dev/null
if [ "$?" == 2 ]; then
# Start agent and store agent connection info.
(umask 066; ssh-agent > ~/.ssh-agent)
eval "$(<~/.ssh-agent)" >/dev/null
fi
fi
# Load identities
ssh-add -l &>/dev/null
if [ "$?" == 1 ]; then
# The agent has no identities.
# Time to add one.
ssh-add -t 4h
fi
Kode ini berasal dari jebakan agen ssh yang menjelaskan jebakan dari apa yang Anda lakukan saat ini, dari pendekatan ini, dan bagaimana Anda harus menggunakan ssh-ident untuk melakukannya untuk Anda.
Jika Anda hanya ingin menjalankan ssh-agent jika tidak berjalan dan tidak melakukan apa pun:
if [ $(ps ax | grep [s]sh-agent | wc -l) -gt 0 ] ; then
echo "ssh-agent is already running"
else
eval $(ssh-agent -s)
if [ "$(ssh-add -l)" == "The agent has no identities." ] ; then
ssh-add ~/.ssh/id_rsa
fi
# Don't leave extra agents around: kill it on exit. You may not want this part.
trap "ssh-agent -k" exit
fi
Namun, ini tidak memastikan ssh-agent
akan dapat diakses (hanya karena sedang berjalan bukan berarti kita memiliki $SSH_AGENT_PID
untuk ssh-add
untuk terhubung ke).
Tidak, sungguh, bagaimana cara memeriksa apakah ssh-agent
sudah berjalan di bash?
Jawaban sejauh ini tampaknya tidak menjawab pertanyaan awal...
Inilah yang bekerja untuk saya:
if ps -p $SSH_AGENT_PID > /dev/null
then
echo "ssh-agent is already running"
# Do something knowing the pid exists, i.e. the process with $PID is running
else
eval `ssh-agent -s`
fi
Ini diambil dari sini
Jika Anda ingin mematikannya tepat setelah skrip keluar, Anda bisa menambahkan ini setelah baris eval:
trap "kill $SSH_AGENT_PID" exit
Atau:
trap "ssh-agent -k" exit
$SSH_AGENT_PID
diatur dalam eval ssh-agent -s
.
Anda seharusnya dapat menemukan menjalankan ssh-agent
s dengan memindai melalui /tmp/ssh-*
dan merekonstruksi SSH_AGENT
variabel darinya (SSH_AUTH_SOCK
dan SSH_AGENT_PID
).
ps -p $SSH_AGENT_PID > /dev/null || eval "$(ssh-agent -s)"
Perintah baris tunggal. Jalankan untuk pertama kali akan memulai ssh-agent. Jalankan untuk kedua kalinya tidak akan memulai ssh-agent. Sobat Sederhana dan Elegan !!!