bagaimana cara menghindari ditanya "Masukkan frasa sandi untuk kunci" ketika saya melakukan operasi ssh pada host jarak jauh?


44

Saya ssh menjadi host jarak jauh (linux, fedora) dan saya ingin melakukan operasi ssh (git dengan bitbucket) di sana. Ada ssh-agent yang berjalan di mesin itu,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

tetapi ketika saya ingin git, saya harus memasukkan kata sandi

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

Catatan: jika saya beroperasi pada mesin itu secara lokal, itu tidak akan meminta saya untuk memasukkan frasa sandi


1
Saya belum menggunakannya tapi ada perintah ssh-add yang menurut saya digunakan untuk hal semacam itu
barlop

Jawaban:


81

Menurut pendapat saya cara terbaik menggunakan ssh

Sebelum menggunakan Git, tambahkan kunci Anda ke ssh-agent

Mulai ssh-agent jika tidak dimulai:

$ eval `ssh-agent -s`

Tambahkan kunci pribadi Anda menggunakan ssh-add

$ ssh-add ~ / .ssh / id_rsa_key
Masukkan frasa sandi untuk /home/user/.ssh/id_rsa_key:
Identitas ditambahkan: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

Periksa apakah kunci ditambahkan (parameter adalah huruf kecil L):

$ ssh-add -l
2048 55: 96: 1a: b1: 31: f6: f0: 6f: d8: a7: 49: 1a: e5: 4c: 94: 6f
/home/user/.ssh/id_rsa_key (RSA)

Coba sambungkan ke server Git Anda:

$ ssh git.example.com

Sekarang Anda dapat menggunakan Git tanpa petunjuk frasa sandi tambahan.

Cara lain

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt


tapi saya telah menggunakan Git untuk menambahkan kunci Anda ke ssh-agent, lalu bagaimana caranya? terima kasih
lily

@ Lily Maaf, saya tidak mengerti pertanyaan Anda.
Roman

1
Ini adalah solusi yang berhasil untuk saya.
Skatox

2
Bagaimana saya membuat ini gigih? Sederhananya .bashrc?
oarfish

1
FYI, evaldiperlukan karena menampilkan perintah yang mengekspor variabel lingkungan seperti SSH_AUTH_SOCK yang diperlukan. unix.stackexchange.com/questions/351725/…
wisbucky

21

Jika sudah ssh-agentberjalan maka Anda dapat menambahkan kunci, dan Anda harus memasukkan frasa sandi satu kali, dan hanya satu kali untuk sesi itu.

ssh-add ~/.ssh/id_rsa

Anda tidak mengatakan OS apa yang Anda gunakan, tetapi jika itu adalah Linux & Gnome maka aplikasi "Kata Sandi dan Kunci" (nama CLI:) seahorsedapat mengaturnya sehingga tidak dikunci saat Anda masuk (tidak diperlukan frasa sandi) . Lingkungan desktop Linux lainnya memiliki manajer sendiri. Saya tidak yakin apa yang OS lain lakukan di sini.


3

Alasan utama untuk menanyakan frasa sandi adalah bahwa kunci Anda dienkripsi, bandingkan dua:

  • tidak dienkripsi

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • terenkripsi

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

Jadi, Anda harus melakukan salah satu dari yang berikut:

  1. Jika terenkripsi, Anda dapat mencoba menghapus enkripsi .
  2. Anda menggunakan kunci yang salah. Jika Anda ingin menggunakan kunci yang berbeda, tentukan file lain atau edit Anda ~/.ssh/configdan tentukan file identitas yang berbeda ( IdentityFile).
  3. Jalankan ssh-add -luntuk mendaftar semua identitas Anda (lalu bandingkan dengan lokal Anda) dan periksa kembali dengan Stash jika Anda menggunakan kunci yang tepat (mereka ada pada konfigurasi Stash).
  4. Jika Anda tahu frasa sandi dan Anda ingin mengotomatiskannya, coba solusi berikut ini:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

Penyelesaian masalah:

  1. Periksa agen SSH Anda berjalan ( eval "$(ssh-agent -s)").
  2. Jalankan kembali git melalui: GIT_TRACE=1 git pullatau dengan GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+) untuk men-debug perintah Anda lagi.
  3. Anda dapat mencoba mem-bypass meminta passphrase (yang akan mengarahkan ulang true), tetapi saya rasa itu tidak akan membantu. Jika diminta, ada alasan untuk itu dan itu pada dasarnya diperlukan.

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

2

The ssh-addProgram dimulai sebuah agen yang dapat menampung (dan memberikan) passphrase Anda. Cara menggunakannya dari jarak jauh adalah di induk shell interaktif Anda (sehingga agen tidak berhenti).

Berikut beberapa pertanyaan terkait:

Sekarang ... menghubungkan dari jarak jauh , sebagai aturan perintah Anda tidak masuk seperti itu, jadi itu tidak dimulai ssh-add. Anda bisa mengatasi ini, dengan menjalankan skrip yang

  • dimulai ssh-agent
  • dimulai ssh-add
  • menambahkan kunci Anda
  • menjalankan perintah yang Anda inginkan.

Titik lemah adalah langkah kedua: Anda masih akan diminta untuk frasa sandi, kecuali jika Anda melemahkan keamanan Anda dengan menggunakan kunci yang tidak memiliki frasa sandi . Beberapa orang melakukan ini, kebanyakan orang menyarankan untuk tidak melakukannya.


ssh-addtidak memulai agen. Terhubung ke agen yang sudah berjalan.
pagi

Terima kasih - Saya terbiasa melakukan ini dalam skrip yang terpisah, dan mengabaikan bagian yang hilang.
Thomas Dickey

0

Anda dapat dengan mudah menghapus frasa sandi dari kunci Anda dengan menggunakan perintah berikut

ssh-keygen -p

Pada prompt pertama, masukkan lintasan file (atau tekan Enter untuk mengubah default) Permintaan kedua, masukkan frasa sandi lama Prompt berikutnya, cukup tekan enter untuk menghapus kata sandi.

Sepertinya ini adalah cara termudah!


0

Anda masih akan mendapatkan prompt kata sandi untuk mendekripsi kunci pribadi bahkan jika itu dimasukkan ke dalamssh-agent hingga kunci publik SSH yang sesuai ditambahkan ke remote ~/.ssh/authorized_keys.

Untuk mereproduksi:

# We are about to ssh to localhost, therefore, unauthorized everyone.
$ rm ~/.ssh/authorized_keys

$ eval $(ssh-agent)
# Agent pid 9290

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

$ ssh localhost
# Enter passphrase for key '/home/uvsmtid/.ssh/id_rsa':
# uvsmtid@localhost's password:
  # NOTE: See password prompt for private key
  #       (and only then prompt for remote login).
  #       Why? Isn't the private key is already loaded by `ssh-add`?

$ ssh-copy-id localhost
$ ssh localhost
  # NOTE: No password for private key anymore.
  #       The key is served by `ssh-agent`.

Cukup membingungkan. Kata sandi login SSH jarak jauh akan cukup dalam hal ini.

Saya dapat berspekulasi bahwa ini mencegah penambahan kunci publik Anda (yang dipasangkan dengan kunci privat terenkripsi) tanpa mengetahui kata sandi enkripsi untuk kunci privat terkait. Ini adalah prosedur masuk sekali per jarak jauh.

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.