GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memeriksa apakah ssh-agent sudah berjalan di bash?

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 !!!


Linux
  1. Bagaimana cara memeriksa apakah Bash memiliki Kerentanan Shellshock?

  2. Bagaimana Cara Memeriksa Kemajuan Running Cp?

  3. Bagaimana Cara Memeriksa Apakah Bash Dapat Mencetak Warna?

  1. Cara Memeriksa apakah String Berisi Substring di Bash

  2. Bagaimana cara memeriksa syslog di Bash di Linux?

  3. Bagaimana cara memeriksa apakah suatu file kosong di Bash?

  1. Cara Memeriksa Versi Postgres Yang Sedang Berjalan/Diinstal

  2. Bagaimana cara memeriksa apakah daemon Hadoop sedang berjalan?

  3. Cara memeriksa apakah layanan tertentu berjalan di Ubuntu