Masukkan frasa sandi SSH satu kali


124

Sebelum meningkatkan

Ketika saya menjalankan git clone git@...(menggunakan ssh) sekali per komputer restart, muncul jendela dialog yang berisi kotak teks untuk memasukkan frasa sandi SSH saya dan dikonfirmasi dengan OK. Kemudian frasa sandi tidak lagi diperlukan sampai awal sistem saya berikutnya.

Setelah meningkatkan ke 13.10

Setelah memutakhirkan ke Ubuntu 13.10 jendela itu tidak muncul lagi tetapi pesan di terminal muncul:

Enter passphrase for key '/home/username/.ssh/id_rsa': 

... setiap kali ketika kloning repositori git ini muncul.

Bagaimana saya bisa memperbaikinya? Saya ingin memasukkan frasa sandi saya hanya sekali.


1
Saya pikir Anda harus menggunakan ssh-addperintah untuk itu. Sudahkah Anda mencobanya?
devius

2
Saya mencoba ssh-agent bash+ ssh-add. Itu hanya berfungsi selama beberapa menit.
Ionică Bizău

Lagipula saya mengalami masalah yang sama. Saya pikir itu mungkin konflik antara ssh-agent OpenSSH dan Gnome Keyring Daemon.
devius


2
Tambahkan AddKeysToAgent yeske .ssh / config berfungsi untuk saya.
xslittlegrass

Jawaban:


138

Pembaruan: tampaknya merupakan bug mulai pukul 13.10:

https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169


Pokoknya menjalankan perintah berikut masalahnya telah diperbaiki untuk saya:

Bagaimana cara memperbaiki

Saya memperbaikinya dengan memasukkan perintah berikut:

$ ssh-agent bash

Ini menciptakan proses bash baru yang memungkinkan Anda menambahkan kunci pribadi. Saat menambahkan kunci pribadi baru Anda akan diminta untuk frasa sandi satu kali dan hanya sekali.

Lalu:

$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa: 
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)

... di mana usernamenama pengguna Anda. Anda dapat melakukan hal yang sama menggunakan $USERvariabel:

$ ssh-add /home/$USER/.ssh/id_rsa

Atau, gunakan saja ~direktori home Anda.

$ ssh-add ~/.ssh/id_rsa

Dan masalahnya sudah diperbaiki.


48
Ini sama sekali tidak menyelesaikan masalah. Itu hanya menambahkan identitas ke agen sampai Anda keluar dari terminal. Jika Anda membuka terminal baru, Anda harus melakukannya ssh-addlagi.
devius

@devius Ya, sepertinya bug. Tapi, perintah di atas memperbaiki masalah saya ...
Ionică Bizău

3
Jadi untuk memperjelas: Dengan "perbaikan" ini, Anda tidak perlu mengetikkan frasa sandi lagi di terminal itu. Saat Anda membuka terminal baru - Anda harus memberikan frasa sandi lagi.
harijay

9
Saya mencoba $ ssh-add /home/username/.ssh/id_rsa(tanpa ssh-agent bash) dan itu bekerja untuk saya bahkan setelah membuka kembali terminal. Tapi solusi lengkap untuk saya adalah ini stackoverflow.com/a/4246809/532252 . Semuanya baik-baik saja bahkan setelah me-reboot mesin.
kishie

1
Saya baru saja mengetik ssh-add di terminal. Tidak perlu beralih ke ssh-agent bash atau tentukan file id_rsa
henry74

39

0) Jawaban singkat

Tambahkan .ssh/configsatu baris Anda di awal:

AddKeysToAgent yes

dan jalankan git / ssh / ... Jika itu tidak cukup, periksa versi ssh Anda dan periksa apakah ssh-agent sudah dimuat dengan instruksi ini:

1) Periksa versi openssh

Pertama periksa bahwa versi ssh Anda, itu harus lebih besar dari yang sama dengan 7.2 :

ssh -V

2) Edit file konfigurasi

Jika demikian, tambahkan saja .ssh/configsatu baris Anda di awal:

AddKeysToAgent yes

3) Periksa apakah ssh-agent sudah terbuka

Biasanya distribusi secara otomatis memuat ssh-agent. Untuk memeriksanya, jalankan

ps aux | grep -v grep | grep ssh-agent

Jika Anda tidak melihat baris yang mengandungnya, Anda harus memuatnya dengan menjalankan:

eval $(ssh-agent)

Perhatikan bahwa ini memungkinkan agen hanya pada terminal saat ini, jadi untuk mengaktifkannya di mana-mana, Anda dapat mencoba menambahkan baris ini dalam ~/.profilefile Anda dan reboot.


11
AddKeysToAgent yesadalah jawaban kanonik pasca-2016 - dan persis apa yang dipahami sebagian besar pengguna modern. Ini pertengahan 2017. Ubuntu> = 16,04 ( Xenial Xerus ) sekarang menjadi asumsi yang masuk akal. Sebagian besar instalasi OpenSSH di alam sekarang mendukung opsi ini. Ad-hoc kludges shell script dari jenis yang dianjurkan oleh setiap jawaban lain untuk pertanyaan ini begitu ... ketinggalan jaman . </sigh>
Cecil Curry

2
Ini seharusnya jawaban yang diterima
simernes

32

Dokumen Atlassian ini memperbaiki masalah saya di Ubuntu 14.04 Server Edition:

Cukup tambahkan nilai ini ke .bashrcfile Anda :

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

Dan setelah masuk, ia meminta kata sandi hanya sekali dan cache. Anda tidak perlu memasukkannya setiap kali.


2
Ini sepertinya bekerja pada distro lain, seperti saya baru saja berhasil menggunakan jawaban ini di Sabayon Linux.
BH2017

1
Terima kasih! Solusi ini bekerja untuk saya pada sistem ubuntu di mana gnome-keyring-daemon tidak berfungsi karena masalah dbus-daemon. Secara khusus, saya mendapatkan kesalahan ini "** Pesan: tidak dapat terhubung ke bus sesi dbus: Tidak dapat secara otomatis memulai dbus-daemon tanpa $ DISPLAY untuk X11" dan setelah mengatur variabel lingkungan tampilan yang saya dapatkan "** Pesan: tidak bisa dapat terhubung ke bus sesi dbus: // peluncuran bin / dbus diakhiri secara abnormal dengan kesalahan berikut: Kesalahan pemutaran otomatis: inisialisasi X11 gagal. "
user207863

1
Ini membutuhkan lebih banyak upvotes, memperbaiki masalah pada Ubuntu 16.04 tervirtualisasi.
Niels Keurentjes

3
Ini memperbaiki masalah bagi saya di Bash untuk Windows juga. Saya mencoba meluncurkan Bash beberapa kali dan mengingat kata sandi itu. Belum mencoba memulai ulang.
Amr

2
setelah mencoba semua solusi lain, ini berhasil untuk saya. Ini harus menjadi solusi bagi OP
João Pimentel Ferreira

20

Solusi untuk bug ini adalah menambahkan yang berikut ke bawah~/.bashrc

eval `gnome-keyring-daemon --start`

2
Bukankah seharusnya gnome keyring hanya menjadi bagian dari sesi Anda?
Pavel Šimerda

1
Jika Anda berbicara tentang 'harus', maka pertanyaan ini seharusnya tidak di sini di tempat pertama, jika semuanya sesempurna itu
Anwar

1
Tidak yakin apakah ini milik .bashrc. Sepertinya Anda harus menambahkannya ke beberapa file profil DE
Dmitry Ginzburg

3

Pengguna shell ikan dapat menggunakan skrip ini untuk melakukan hal yang sama.

# content has to be in .config/fish/config.fish
# if it does not exist, create the file
setenv SSH_ENV $HOME/.ssh/environment

function start_agent                                                                                                                                                                    
    echo "Initializing new SSH agent ..."
    ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV
    echo "succeeded"
    chmod 600 $SSH_ENV 
    . $SSH_ENV > /dev/null
    ssh-add
end

function test_identities                                                                                                                                                                
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $status -eq 0 ]
        ssh-add
        if [ $status -eq 2 ]
            start_agent
        end
    end
end

if [ -n "$SSH_AGENT_PID" ] 
    ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    end  
else
    if [ -f $SSH_ENV ]
        . $SSH_ENV > /dev/null
    end  
    ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null
    if [ $status -eq 0 ]
        test_identities
    else 
        start_agent
    end  
end

0

Saya menggunakan ini:

vim ~/.profile

eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg`
export SSH_AUTH_SOCK
export GPG_AGENT_INFO

0

Jika Anda menggunakan file .ppk azure

Konversikan ke pem dan tambahkan izin 400 dengan langkah-langkah sederhana:

sudo apt-get install putty
puttygen <path_to_key>/keyname.ppk -O private-openssh -o <path>/aws_key.pem
sudo chmod 400 <path>/aws_key.pem
ssh -vi aws_key.pem ubuntu@<ip_address>

0

Pada Ubuntu 18.04, ssh-agent dimulai ketika sesi X dibuka, dikelola dalam file /etc/X11/Xsession.options:

# cat /etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.