Bagaimana menghindari frasa yang diminta setiap kali saya mendorong ke Bitbucket


217

Saya mengatur barang-barang ssh saya dengan bantuan panduan ini , dan itu berfungsi dengan baik (saya bisa berlari hg pushtanpa diminta passphrase). Apa yang bisa terjadi antara dulu dan sekarang, mengingat saya masih menggunakan direktori home yang sama.

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

Jawaban:


337

Anda perlu menggunakan agen ssh. Jawaban singkat: coba

$ ssh-add

sebelum mendorong. Berikan frasa sandi Anda saat diminta.

Jika Anda belum menjalankan ssh agent, Anda akan mendapatkan pesan berikut:

Could not open a connection to your authentication agent.

Dalam situasi itu, Anda dapat memulai dan mengatur lingkungan Anda dengan demikian

eval $(ssh-agent)

Kemudian ulangi ssh-addperintahnya.

Layak untuk melihat halaman agen ssh .


2
Apa gunanya evalAnda bisa mengetik ssh-agent?
James McMahon

4
Ini menampilkan beberapa perintah yang memungkinkan Anda untuk menggunakannya, dan tidak menjalankannya untuk Anda; evalapakah excuting.
tshepang

Tidak terkait dengan pertanyaan asli tetapi jika Anda terus memiliki masalah ini di GitHub, Bitbucket dll, pastikan Anda menggunakan URL git / ssh, bukan http, yang akan terus menanyakan nama pengguna + kata sandi.
Czechnology

Dan jika Anda tidak memiliki kunci default, atau ingin menambahkan banyak,ssh-add /path/to/key
hoosierEE

46

Cara untuk mengatasi ini adalah dengan ssh-agentdan ssh-add:

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

Setelah ini frasa sandi disimpan untuk sesi saat ini. dan tidak akan ditanya lagi.


7
Kebanyakan orang sama sekali tidak ingin disadap karena frasa pass mereka.
connexo

26

Saya menggunakan Keychain untuk mengelola kunci ssh. Ini juga tersedia di Debian dan mungkin dengan Ubuntu

apt-get install keychain

Ini adalah halaman paket gantungan kunci Debian . Seperti yang Anda lihat, proyek ini tidak terlalu aktif, tetapi bekerja untuk saya. Saya juga berkomentar sedikit tentang ini di jawaban lain di sini


2
//, Ini berhasil untukku. Ini jauh lebih baik daripada ssh-agent, karena saya tidak perlu memasukkan kata sandi kunci ssh setiap kali saya membuka terminal .
Nathan Basanese

@NathanBasane apakah Anda mengatakan bahwa menggunakan gantungan kunci Anda tidak perlu memasukkan kata sandi kunci ssh setiap kali Anda membuka terminal? Bagaimana Anda mengonfigurasinya? karena gantungan kunci terus menanyakan kata sandi setiap kali saya membuka terminal, hanya saja pertama kali saya membukanya setelah booting, tapi tetap saja. Saya tidak ingin memasukkan frasa sandi setiap saat.
m4l490n

@ m4l490n Tidak, jika Anda menggunakan gantungan kunci, Anda tidak perlu memasukkan kata sandi kunci ssh setiap kali Anda membuka terminal. Tetapi Anda harus memasukkannya satu kali setelah booting. Frasa sandi tidak disimpan ke disk - itu tidak aman.
Faheem Mitha

Bagi saya, itu meminta setiap kali saya masuk (saya punya repositori git + kunci ssh di server jarak jauh dan setiap kali saya melakukan "git pull", saya harus memasukkan frasa sandi)
Martin Thoma

@ MartinThoma Itu terlihat salah. Pastikan Anda telah mengkonfigurasi .ssh dengan benar. Secara khusus, apakah shell Anda dikonfigurasi dengan benar? Jika itu masih tidak berhasil untuk Anda dan Anda tidak dapat menemukannya, Anda dapat mengajukan pertanyaan.
Faheem Mitha

13

Buat (atau edit jika ada) file ~ / .ssh / config berikut:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

Tapi saya menggunakan sepasang kunci yang berbeda untuk setiap layanan ...
connexo

@connexo Anda dapat mengganti tanda bintang wildcard dengan nama host individual Anda dan 'id_rsa' dengan kunci pribadi yang sesuai
ness-EE

1
Saya perlu menambahkan IgnoreUnknown AddKeysToAgent,UseKeychaintepat di atas UseKeychain yes.
consideRatio

1
Saya mendapatkan kesalahan ini: "Opsi konfigurasi buruk: usekeychain" pada baris "UseKeychain ya".
m4l490n

@ m4l490n: sepertinya UseKeychainopsi telah ditambahkan di OpenSSH 7.1p2 (2016-02-28). Mungkin Anda memiliki versi sebelumnya. openssh.com/txt/release-7.2
chus

6

Untuk kenyamanan, metode optimal adalah kombinasi dari jawaban jmtd dan Faheem .

Menggunakan ssh-agentsendiri berarti bahwa instance baru ssh-agentperlu dibuat untuk setiap terminal baru yang Anda buka. keychainketika diinisialisasi akan meminta frasa sandi untuk kunci pribadi dan menyimpannya. Dengan begitu kunci pribadi Anda dilindungi kata sandi tetapi Anda tidak perlu memasukkan kata sandi berulang kali.

The Arch wiki merekomendasikan inisialisasi gantungan kunci dari /etc/profile.d/atau profil shell Anda, seperti .bash_profileatau .bashrc. Ini memiliki kelemahan karena intializes gantungan kunci Anda segera setelah Anda membuka terminal.

Pendekatan yang lebih fleksibel adalah menggabungkan keychaindengan tmuxsesi tertentu . Jadi, di .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... dan kemudian itu hanya kasus memulai tmuxsesi aman saat dan ketika diperlukan (diluncurkan dari keybind):

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

Sekarang, gantungan kunci Anda hanya akan diinisialisasi satu kali ketika Anda memulai tmuxsesi khusus itu . Selama sesi itu berlanjut, Anda akan dapat mengakses sshkunci - kunci itu dan mendorong ke repositori jarak jauh Anda.


Bagaimana saya membuatnya bekerja pada mesin jarak jauh? Saya memodifikasi skrip kedua untuk memeriksa $ SSH_CLIENT dan jika ada, jangan jalankan urxvtc, cukup tmux. Itu bekerja, tetapi masalahnya adalah bagian .bash_profile. Ketika saya pertama kali masuk ke kotak itu mengatakan "server tidak ditemukan: Sambungan ditolak" yang merupakan output dari "tmux ls". Kemudian, ketika saya menjalankan skrip kedua, tmux memulai sesi baru atau menempel pada yang sudah ada, tetapi tidak ada prompt gantungan kunci. Lalu, ketika saya keluar dari sesi, prompt gantungan kunci ada di sana menunggu.
jonyamo

Saya telah memperbarui jawaban untuk membisukan output tmux jika tidak ada sesi.
jasonwryan

Terima kasih, tapi itu masih belum menyelesaikan masalah dengan gantungan kunci. tmux membuat sesi baru tapi langsung ke prompt kosong apa pun. Hanya ketika saya keluar dari sesi tmux saya melihat prompt keychain meminta frasa sandi saya.
jonyamo

Saya kira saya harus berhenti mengatakan gantungan kunci, karena gantungan kunci hanya dijalankan di .bash_profile. Masalahnya adalah dari mengeksekusi ssh-add. Meskipun, jika saya menjalankan ssh-add secara manual setelah membuat sesi tmux, ia berfungsi.
jonyamo

1
Lewati skrip kedua dan mulai saja sesi tmux Anda yang aman .profile- dengan begitu Anda akan mendapatkan prompt untuk kunci begitu Anda masuk.
jasonwryan

0

Anda bisa menggunakan sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Anda hanya perlu menambahkan sshpass -p yourpassphrasesebelum menambahkan sshperintah biasa Anda .


2
Itu terdengar seperti ide yang sangat bodoh. Bukankah itu membuat kata sandi Anda muncul dalam teks yang jelas dalam riwayat shell Anda?
connexo

Tepat, tetapi apakah Anda tidak seharusnya melindungi sesi Anda dengan kata sandi juga?
belka

1
Bahkan jika Anda melakukannya, seberapa sering Anda memiliki seorang kolega duduk di sebelah Anda dan membantu Anda / belajar dari Anda?
connexo
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.