parallel-ssh dengan Passphrase Protected SSH Key

8

Saya ingin menggunakan kunci SSH saya yang dilindungi frasa sandi saat melakukan tugas dengan parallel-ssh(dan alat terkait). Namun, saya tidak bisa membuatnya bekerja.

Semua dokumentasi, mengenai parallel-ssh, menunjukkan bahwa saya harus dapat menggunakan --askpassatau -Amelakukan ini:

-A
--askpass
      Prompt  for  a  password  and pass it to ssh.  The password may be 
      used for either to unlock a key or for password authentication.  The 
      password is transferred in a fairly secure manner (e.g., it will not 
      show up in argument lists).  However, be aware that a root user on 
      your system could potentially intercept the password.

Namun, ketika saya memasukkan frasa sandi kunci saya, itu tidak berfungsi:

$ parallel-ssh --hosts=machines --user=my_user --askpass \
    --timeout=0 --inline -v 'sudo apt-get update'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 09:59:36 [FAILURE] amritiii Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[2] 09:59:37 [FAILURE] gbdev Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[3] 09:59:37 [FAILURE] code Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[4] 09:59:37 [FAILURE] apollo Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[5] 09:59:37 [FAILURE] odin Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[6] 09:59:37 [FAILURE] hathor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[7] 09:59:37 [FAILURE] ldap Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[8] 09:59:37 [FAILURE] thor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[9] 09:59:37 [FAILURE] bioserver Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).

Saya telah mengkonfirmasi bahwa kunci SSH dan frasa sandi saya berfungsi pada masing-masing mesin, jadi saya tidak tahu cara membuatnya berfungsi.

Nathan S. Watson-Haigh
sumber
Saya berasumsi bahwa parallel-ssh sama dengan pssh?
slm
Ya, parallel-sshdan psshmemang sama.
Nathan S. Watson-Haigh

Jawaban:

5

Dengan anggapan itu parallel-sshdan psshsetara maka ya apa yang Anda coba lakukan harus bekerja dengan baik dengan mem-pipkan kata sandi dalam menggunakan -Asaklar.

Contoh

Berikut adalah contoh di mana saya terhubung ke 2 sistem yang berbeda, host1dan host2. Saya menggunakan -lsakelar psshuntuk menyediakan pengguna default root. Namun pada host2saya menimpa ini di -Hsaklar dengan menetapkan nama host sebagai user1@host2.

$ pssh -A -i -H "host1 user1@host2" -l root 'echo "hi"'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 21:38:00 [SUCCESS] user1@host2
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

X11 forwarding request failed on channel 1
Killed by signal 1.
[2] 21:38:00 [SUCCESS] host1
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

ControlSocket /home/user1/.ssh/[email protected]:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.

Ketika cara di atas berfungsi, Anda akan melihat output dari perintah yang saya jalankan echo "hi",.

Masalah Anda

Masalah yang Anda hadapi dengan frasa sandi pada pasangan kunci SSH Anda disebabkan oleh bug. Ini adalah bug berjudul: Edisi 80: Tidak lulus frasa sandi? . Komentar ke-4 untuk masalah itu menunjukkan tambalan:

kutipan

# 4 robine ... @ gmail.com

Saya mengubah jalur menjadi

  if not ( prompt.strip().lower().endswith('password:') or 
        'enter passphrase for key' in prompt.strip().lower()):

dan tampaknya berhasil

Referensi

slm
sumber
Terima kasih atas masukan slm Anda. parallel-sshdan psshmemang sama. Saya tidak bertanya apakah itu mungkin - dokumentasi menjelaskan bahwa itu mungkin. Saya mengalami kesulitan untuk membuatnya berfungsi seperti yang didokumentasikan.
Nathan S. Watson-Haigh
1
@ NathanS.Watson-Haigh - lihat pembaruan. Ini bug, saya sudah memperbaiki patch.
slm
Ini memang masalah yang memengaruhi saya. Namun, karena penulis parallel-sshmasih tidak yakin bagaimana cara terbaik untuk mendeteksi pertanyaan prompt kata sandi dan dengan demikian menanggapi dengan kata sandi / frasa yang dimasukkan, saya akan tetap menggunakan metode gantungan kunci saya. Saya tidak ingin frasa sandi saya diungkapkan secara tidak sengaja ke pertanyaan yang salah.
Nathan S. Watson-Haigh
1
Saya akan menerima ini sebagai jawaban ketika Anda berhasil mengetahui bahwa ini adalah bug yang dikenal dalam cara parallel-sshmeneruskan kata sandi SSH. Namun, bagi mereka yang menemukan pertanyaan ini di kemudian hari, bug ini mungkin telah diperbaiki atau Anda dapat memilih untuk tidak mengedit askpass_client.pyfile. Dalam kedua kasus tersebut, Anda dapat menyiasatinya menggunakan keychainjawaban ( unix.stackexchange.com/a/128998/57414 ) atau jawaban ssh-agent ( unix.stackexchange.com/a/129022/57414 )
Nathan S. Watson- Haigh
5

Saya berhasil mendapatkan ini berfungsi dengan menginstal keychaindaripada secara manual menambal bug yang menyebabkan masalah saya.

Instal dan Jalankan secara manual gantungan kunci

# install keychain package
$ sudo apt-get install keychain

# add my key to the keychain, entering passphrase when asked
$ keychain ~/.ssh/id_rsa

# source the file generated by the above command
$ . ~/.keychain/$(uname -n)-sh

Jalankan Perintah tanpa Kata Sandi / Input Frasa Sandi

Sekarang kali ini saya tidak perlu frasa sandi saat menelepon parallel-sshkarena gantungan kunci menangani otentikasi:

$ parallel-ssh --hosts=machines --user=my_user --timeout=0 'sudo apt-get update'
[1] 14:52:15 [SUCCESS] amritiii 
[2] 14:52:17 [SUCCESS] odin
[3] 14:52:25 [SUCCESS] gmod
[4] 14:53:11 [SUCCESS] bioserver
[5] 14:53:14 [SUCCESS] thor
[6] 14:53:14 [SUCCESS] apollo
[7] 14:53:16 [SUCCESS] gbdev
[8] 14:53:17 [SUCCESS] code
[9] 14:53:18 [SUCCESS] hathor
[10] 14:53:34 [SUCCESS] ldap

Jalankan gantungan kunci saat masuk

Daripada harus menjalankan secara manual dan menambahkan kunci Anda ke gantungan kunci, cukup tambahkan berikut ini di akhir Anda ~/.bash_profile:

$ keychain --clear $HOME/.ssh/id_rsa
$ . $HOME/.keychain/$(uname -n)-sh

Ini memastikan bahwa pada login pertama Anda, setelah reboot, Anda diminta untuk frasa sandi kunci Anda. Kunci Anda kemudian akan tetap di gantungan kunci sampai reboot berikutnya atau Anda menghapus gantungan kunci secara manual.

Pekerjaan Cron Menggunakan gantungan kunci

Dengan memasukkan di atas ke dalam ~/.bash_profilefile Anda, Anda dapat mengambil keuntungan dari fakta bahwa kunci Anda sekarang disimpan di gantungan kunci dengan membasahi file yang sama sebelum cronjob Anda dijalankan. Misalnya saya memiliki skrip cadangan yang berjalan pada pukul 21:00 setiap malam dan menyalin barang-barang ke komputer jarak jauh melalui SSH. Ini adalah entri di crontab saya ( crontab -e):

 0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh
Nathan S. Watson-Haigh
sumber
1

Gunakan ssh-agent untuk mengotentikasi secara otomatis (dengan nama shell sebagai argumen untuk mengatur variabel lingkungan agen di shell baru itu). Tambahkan kunci dengan ssh-add dan ketik kata sandi Anda hanya sekali.

$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity: 
$ 
$ pssh ...
Emmanuel
sumber