Saya memiliki situs sebagai repo Git jarak jauh yang menarik dari Bitbucket.com menggunakan alias SSH. Saya dapat secara manual memulai ssh-agent di server saya tetapi saya harus melakukan ini setiap kali saya masuk melalui SSH.
Saya secara manual memulai ssh-agent:
eval ssh-agent $SHELL
Lalu saya menambahkan agen:
ssh-add ~/.ssh/bitbucket_id
Kemudian muncul ketika saya melakukannya:
ssh-add -l
Dan saya baik untuk pergi. Apakah ada cara untuk mengotomatisasi proses ini sehingga saya tidak harus melakukannya setiap kali saya masuk? Server menjalankan RedHat 6.2 (Santiago).
ssh-agent <command>
berjalan<command>
sebagai subprosesssh-agent
, jadi Anda memulai shell baru. Saya pikir kamu maueval ssh-agent
..bash_profile
khusus untuk bash,.profile
generik untuk semua shell POSIX.bash
akan mencari yang pertama.bash_profile
, lalu default ke.profile
.ssh-agent
shell "standar" (kompatibel POSIX) adalaheval $(ssh-agent -s)
. Perhatikan juga bahwa Anda harus memastikan bahwa Anda benar-benar menyingkirkan agen ketika Anda logout, jadi sebaiknya Anda memasukkan setelahtrap 'kill $SSH_AGENT_PID' EXIT
Anda.profile
baris yang memulai agen.Jawaban:
Silakan baca artikel ini. Anda mungkin menemukan ini sangat berguna:
http://mah.everybody.org/docs/ssh
Kalau-kalau tautan di atas hilang suatu hari, saya menangkap bagian utama dari solusi di bawah:
sumber
.bash_profile
menggunakansource ~/.bash_profile
dalam sesi shell Anda saat ini. Mesin restart juga akan berfungsi karena itu akan memuat konfigurasi baru.SSH_ENV="$HOME/.ssh/env"
(yaitu tidak / lingkungan) Mengapa? sshd menggunakan ~ / .ssh / environment (lihat halaman manual: PermitUserEnvironment). Github juga merekomendasikan ini dalam solusi mereka - help.github.com/articles/…ssh-agent
perintah mulai di .bashrc akan membuatscp
perintah tidak berfungsi.Di Arch Linux, berikut ini berfungsi dengan sangat baik (harus bekerja pada semua distro berbasis systemd):
Buat layanan pengguna systemd, dengan menempatkan yang berikut ke
~/.config/systemd/user/ssh-agent.service
:Setup shell memiliki variabel lingkungan untuk socket (
.bash_profile, .zshrc, ...
):Aktifkan layanan, sehingga akan dimulai secara otomatis saat masuk, dan mulai:
Tambahkan pengaturan konfigurasi berikut ke file konfigurasi ssh lokal Anda
~/.ssh/config
(ini berfungsi sejak SSH 7.2):Ini akan menginstruksikan klien ssh untuk selalu menambahkan kunci ke agen yang sedang berjalan, jadi tidak perlu menambahkan ssh sebelumnya.
sumber
ssh-agent
proses individualnya . Mungkin saya kurang pengetahuan bahkan setelah membaca dokumen.SSH_AGENT_PID
variabel lingkungan, meskipun :(Pertanyaan lama, tetapi saya menemukan situasi yang sama. Jangan berpikir jawaban di atas sepenuhnya mencapai apa yang dibutuhkan. Bagian yang hilang adalah
keychain
; instal jika belum.Kemudian tambahkan baris berikut ke
~/.bashrc
Ini akan memulai
ssh-agent
jika tidak berjalan, sambungkan ke sana jika sudah, muatssh-agent
variabel lingkungan ke shell Anda, dan muat kunci ssh Anda.Ubah
id_rsa
ke kunci pribadi mana saja yang~/.ssh
ingin Anda muat.Referensi
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
sumber
keychain --eval id_[yourid file]
ke .bashrceval `keychain --eval id_[yourid file]`
untuk.bashrc
. Backticks diperlukan untuk mengevaluasi variabel lingkungan ke shell saat ini untuk akses ke ssh-agent yang sedang berjalan.-q
opsi untuk mode senyap. Info lebih lanjut tentang Keychain: funtoo.org/KeychainSolusi yang diterima memiliki kekurangan berikut:
Jika kunci Anda tidak perlu mengetik kata sandi, saya sarankan solusi berikut. Tambahkan berikut ini ke
.bash_profile
ujung Anda (edit daftar kunci dengan kebutuhan Anda):Ini memiliki keuntungan sebagai berikut:
Ini memiliki kemungkinan kerugian:
ssh-add
perintah hanya akan mempengaruhi satu sesi, yang sebenarnya merupakan masalah hanya dalam keadaan yang sangat tidak biasa;Perhatikan bahwa beberapa
ssh-agent
proses bukanlah suatu kerugian, karena mereka tidak mengambil lebih banyak memori atau waktu CPU.sumber
Tambahkan ini ke Anda
~/.bashrc
, lalu keluar dan kembali untuk memberi efek.Ini seharusnya hanya meminta kata sandi saat pertama kali Anda login setelah setiap reboot. Itu akan tetap menggunakan kembali sama
ssh-agent
selama itu tetap berjalan.sumber
~/.ssh/id_rsa
? Tampaknyassh-add
bagian dari jawaban Anda mengharapkan nama file default untuk kunci tersebut.Jadi saya biasa menggunakan pendekatan yang dijelaskan di atas, tapi saya lebih suka agen mati ketika sesi bash terakhir saya berakhir. Ini sedikit lebih lama dari solusi lain, tetapi pendekatan yang saya sukai. Ide dasarnya adalah bahwa sesi bash pertama memulai ssh-agent. Kemudian setiap sesi bash tambahan memeriksa file konfigurasi (
~/.ssh/.agent_env
). Jika itu ada dan ada sesi berjalan maka sumber lingkungan dan buat hardlink ke file socket/tmp
(perlu berada di sistem file yang sama dengan file socket asli). Saat sesi bash ditutup, masing-masing menghapus hardlinknya sendiri. Sesi terakhir untuk menutup akan menemukan bahwa hardlink memiliki 2 tautan (hardlink dan asli), penghapusan soket proses sendiri dan membunuh proses akan menghasilkan 0, meninggalkan lingkungan yang bersih setelah sesi bash terakhir ditutup.sumber
Hanya untuk menambahkan solusi lain: P, saya pergi dengan kombinasi solusi @spheenik dan @ collin-anderson.
Bisa jadi sedikit lebih elegan tetapi sederhana dan mudah dibaca. Solusi ini:
AddKeysToAgent yes
ada di konfigurasi ssh Anda sehingga kunci akan ditambahkan secara otomatis saat digunakanKomentar diterima :)
sumber
AddKeysToAgent yes
pengaturannya. Terima kasih.Saya menyelesaikannya dengan menambahkan ini ke / etc / profile - system wide (atau ke pengguna .profile lokal , atau _.bash_profile_):
Ini memulai ssh-agent baru jika tidak berjalan untuk pengguna saat ini, atau mengatur ulang parameter ssh-agent env jika menjalankan.
sumber
if pgrep -u $WHOAMI $SERVICE >/dev/null
kerjanya?Pengguna shell ikan dapat menggunakan skrip ini untuk melakukan hal yang sama.
sumber
Saya menggunakan alat ssh-ident untuk ini.
Dari halaman man- nya:
sumber
Mencoba solusi pasangan dari banyak sumber tetapi semua sepertinya terlalu banyak kesulitan. Akhirnya saya menemukan yang paling mudah :)
Jika Anda belum terbiasa dengan zsh dan oh-my-zsh, lalu instal. Kau akan menyukainya :)
Kemudian edit
.zshrc
temukan
plugins
bagian dan perbarui untuk digunakanssh-agent
seperti ini:Dan itu saja! Anda akan memiliki
ssh-agent
dan menjalankan setiap kali Anda memulai shell Andasumber
Saya sangat menyukai jawaban Anda. Itu membuat bekerja dari
cygwin / linux
host jauh lebih mudah. Saya menggabungkan fungsi awal dan akhir untuk membuatnya aman.sumber