Apakah ada cara mudah untuk memastikan bahwa semua login dari pengguna yang diberikan (yaitu saya) menggunakan ssh-agent yang sama? Saya meretas naskah untuk membuat pekerjaan ini sebagian besar waktu, tapi saya curiga selama ini ada beberapa cara untuk melakukannya yang baru saja saya lewatkan. Selain itu, sejak saat itu telah ada kemajuan luar biasa dalam teknologi komputasi, seperti misalnya situs web ini.
Jadi tujuannya di sini adalah itu
- setiap kali saya masuk ke kotak, terlepas dari apakah itu melalui SSH, atau dalam sesi grafis dimulai dari gdm / kdm / etc, atau di konsol:
- jika nama pengguna saya saat ini tidak
ssh-agent
berjalan, satu dimulai, variabel lingkungan diekspor, danssh-add
dipanggil. - jika tidak, koordinat agen yang ada diekspor dalam variabel lingkungan sesi login.
- jika nama pengguna saya saat ini tidak
Fasilitas ini sangat berharga ketika kotak tersebut digunakan sebagai titik relai ketika ssh
masuk ke kotak ketiga. Dalam hal ini ia menghindari keharusan mengetikkan frasa sandi kunci pribadi setiap kali Anda melakukan ssh dan kemudian ingin, misalnya, melakukan git push
atau sesuatu.
Script yang diberikan di bawah ini melakukan hal ini sebagian besar andal, meskipun gagal baru-baru ini ketika X crash dan saya kemudian memulai sesi grafis lainnya. Mungkin ada kelicikan lain yang terjadi dalam contoh itu.
Ini skrip buruk-baik-saya. Saya sumber ini dari .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;
Tolong beritahu saya ada cara yang lebih baik untuk melakukan ini. Juga tolong jangan lihat ketidakkonsistenan / kesalahan (mis. Memasukkan var
barang ke dalam etc
); Saya menulis ini beberapa waktu lalu dan sejak itu belajar banyak hal.