Cara mudah untuk menjalankan ssh-agent dan ssh-add saat masuk melalui SSH?

38

Saya mencoba agar perintah berikut dijalankan secara otomatis ketika saya masuk ke server saya melalui ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Kunci ssh saya memiliki kata sandi dan saya baik-baik saja dengan memasukkannya sekali per login.

Saya mencoba meletakkan ini di file .bashrc saya, namun saya percaya bahwa ssh-agent memulai sesi bash baru. Ketika saya mencoba masuk setelah memiliki ini di .bashrc saya, macet, dan saya harus mengetikkan 'keluar' untuk kemudian melihat prompt 'masukkan passphrace untuk membuka kunci'

Ada saran lain?

Server menjalankan Ubuntu LTS

Klik Upvote
sumber
Mengapa agen kunci di server? Seharusnya pada klien lokal Anda dari mana Anda terhubung.
Zoredache
@Zoredache Saya ingin dapat melakukan git pulldan itu pada server jauh
Klik Upvote
Kemudian jalankan agen SSH pada mesin lokal Anda, dan teruskan agen tersebut.
Zoredache
@Zoredache Terima kasih, tidak tahu itu mungkin. Namun saya masih ingin dapat melakukan ssh-add / ssh-agent dari dalam skrip bash, bahkan dari mesin lokal saya. Susah rasanya harus menjalankan perintah-perintah itu secara manual.
Klik Suara

Jawaban:

52

Anda dapat mencoba menambahkan ini:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Dengan cara ssh-agentini tidak memulai shell baru, itu hanya meluncurkan dirinya di latar belakang dan mengeluarkan perintah shell untuk mengatur variabel lingkungan yang sesuai.

Seperti yang dikatakan dalam komentar, mungkin Anda tidak ingin menjalankan agen sama sekali pada host jarak jauh, melainkan pada kotak tempat Anda bekerja, dan menggunakan

ssh -A remote-host

untuk meneruskan layanan agen ssh lokal Anda ke host jarak jauh.

Untuk alasan keamanan, Anda hanya boleh menggunakan penerusan agen dengan host yang dijalankan oleh orang-orang yang dapat dipercaya, tetapi itu lebih baik daripada menjalankan agen lengkap dari jarak jauh kapan saja.

Tobi Oetiker
sumber
Ketika saya ganti ssh-agent /bin/bashdengan ssh-agent -s, dan kemudian saya coba lakukan git pull, saya masih meminta kata sandi kunci pribadi untuk membukanya. Bukan itu yang saya inginkan, saya hanya perlu memasukkan kata sandi untuk melakukan ssh-add, dan tidak harus mengulanginya setiap kali saya menjalankan perintah git. Ada ide?
Klik Suara
dan menjalankan agen secara lokal dan menggunakan ssh -A bukan pilihan untuk Anda? Masalahnya adalah, Anda tidak dapat 'me-restart' ssh-agent pada setiap koneksi. Setiap kali Anda memulainya, ia tahu 'tidak ada' dan ketika Anda ssh-tambahkan kunci Anda harus mendekripsi itu ...
Tobi Oetiker
untuk file .ssh / config Anda: Host remote-host ControlMaster auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker
1
oops baru sadar di bash kamu butuh eval ekstra di depan panggilan ssh-agent .. perbarui jawabanku di atas
Tobi Oetiker
1
Anda bisa membuat alias
Tobi Oetiker
2

Salah satu alternatif adalah menggunakan Keychain Funtoo . Kemudian Anda bisa menempelkan satu liner ini di bash shell Anda:

eval $(keychain --eval id_rsa)

Itu melakukan hal yang sama (meluncurkan ssh agent, dll.), Sementara juga tidak menjalankan proses ssh-agent untuk setiap subkulit. Alih-alih mencari contoh "sudah berjalan" yang Anda miliki dan menempelkan Anda padanya.

Erik Aronesty
sumber