Bagaimana cara mengatur SSH jadi saya tidak perlu mengetikkan kata sandi, dan tanpa menggunakan kunci publik?

9

Saya tahu ada lusinan pertanyaan di sini tentang cara menyambung ke server SSH tanpa mengetik kata sandi Anda setiap waktu , dan jawabannya selalu "gunakan kunci publik." Yah, saya menemukan diri saya dalam keadaan langka di mana itu benar-benar bukan pilihan. Untuk beberapa alasan yang tidak dapat dijelaskan, daemon OpenSSH pada server yang saya coba sambungkan telah dikonfigurasi

RSAAuthentication no
PubkeyAuthentication no

di /etc/ssh/sshd_config. Saya tidak memiliki akses administratif di server sehingga saya tidak dapat mengubah ini atau opsi konfigurasi server lainnya. (Saya tentu saja memiliki kontrol penuh atas konfigurasi klien: OpenSSH 5.8 di Linux.)

Apa saja opsi saya, dan khususnya, apa opsi paling aman, untuk menghindari keharusan mengetikkan kata sandi setiap kali saya ingin SSH masuk ke server ini? Saya menjaga komputer saya sendiri cukup aman, jadi mari kita asumsikan risiko keamanan menyimpan kata sandi dalam file di klien cukup rendah, jika memang diperlukan.

Metode otentikasi lain yang dapat diterima server ternyata adalah API GSS (yang saya tidak tahu tentang), keyboard interaktif (yang saya juga tidak tahu tentang), dan kata sandi. Berikut adalah beberapa opsi konfigurasi yang relevan:

#ChallengeResponseAuthentication yes

#KerberosAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

#UsePAM no

dan di sini adalah -vvjejak debug ( ):

debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information

debug1: Unspecified GSS failure.  Minor code may provide more information

debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug1: Authentications that can continue: gssapi-with-mic,password,keyboard-interactive
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
David Z
sumber
Apakah server memiliki /etc/krb5.keytab? GSSAPI (Kerberos) bisa sederhana untuk mengatur sisi klien; Saya harus meminta nama host server. (Juga: keyboard-interactivesangat mirip dengan password, kecuali tidak terbatas pada satu prompt "Kata sandi:".)
user1686
@ kegembiraan Tidak /etc/krb5.keytab, tetapi memang ada /etc/krb5/krb5.keytab. Saya tidak memiliki akses ke konten. Nama servernya sftp.pass.psu.edu(saya rasa tidak ada salahnya memberikan nama itu) jika itu membantu Anda menjelaskan prosedurnya.
David Z
Aah, passdisk PSU lama. Kenangan yang menyenangkan. Saya cukup senang dengan kata sandi auth. Mengapa Anda tidak bertanya kepada orang-orang yang menghitung kampus (apakah CAC ketika saya pergi ke sana) alih-alih menjangkau internet? Maksudku, ayolah, mereka punya cermin Debian. Mereka tidak semua admin Windows-only clueless.
Broam
@ Bob Saya tidak bisa membayangkan bahwa saya akan menjadi orang pertama yang bertanya, jadi mungkin mereka punya alasan untuk tetap seperti itu ... Tapi saya kira tidak ada salahnya untuk mencoba.
David Z

Jawaban:

3

Dalam hal ini, menulis (atau merekam dengan lebih baik) skrip harapan akan menjadi salah satu pilihan Anda.

Setiap sistem berbeda sehingga tidak akan ada skrip, tetapi dengan ekspektasi otomatis sangat mudah untuk merekam skrip untuk tujuan ini.

johnshen64
sumber
Sangat tidak aman, tetapi memiliki suara positif untuk menjadi jawaban paling sederhana dan paling langsung.
Zac B
Poin yang bagus. lebih baik semua ini dilakukan di belakang firewall dan di jaringan pribadi.
johnshen64
8

Dari informasi yang dikumpulkan sejauh ini, server sftp.pass.psu.edumendukung otentikasi Kerberos 5 (GSSAPI) dan ada di dce.psu.eduranah.

Kerberos sangat umum di jaringan dengan banyak server dan workstation; banyak lembaga pendidikan besar yang mengaturnya. Satu jika kelebihannya dibandingkan otentikasi kunci publik adalah bahwa satu kinitsecara otomatis memberikan kredensial untuk semua mesin di ranah Kerberos, tanpa harus menyalin kunci publik untuk masing-masing. Lainnya adalah dukungan protokol - kredensial Kerberos yang sama dapat digunakan dengan lebih dari 30 protokol (mail, sistem file, database ...), bukan hanya SSH.

(Mengenai "admin Windows-only clueless": dce.psu.eduranah sebenarnya tampaknya didasarkan pada Active Directory dan di-host oleh server Windows.)

Coba ikuti langkah-langkah ini:

  1. Masuk ke Kerberos. (Alat kinitdan klistmungkin dalam "krb5-user" atau paket serupa, jika belum termasuk dalam sistem.)

    kinit your_username @ dce.psu.edu
    

    Jika tidak ada kesalahan yang ditampilkan, login berhasil. klistharus memperlihatkan krbtgt/dce.psu.edu@...item " ".

  2. Sekarang terhubung ke server SSH, dengan -vvopsi; jika otentikasi berhasil, bagus.

    Jika tidak, Anda mungkin harus mengedit /etc/krb5.conffile Anda . Di bawah [domain_realm]bagian ini, tambahkan berikut ini:

    [domain_realm]
        .psu.edu = dce.psu.edu
    
  3. Dengan pengaturan Krb5 default, tiket yang diperoleh di # 1 harus valid selama 10 jam, dan dapat diperpanjang hingga seminggu. Saya tidak punya cara memverifikasi pengaturan.

    Jika Anda ingin menyimpan kata sandi dalam sebuah file, sebuah simpel kinit your_principal < password.txtharus berfungsi, meskipun tidak sepenuhnya dapat diandalkan.

    Dengan ktutildimungkinkan untuk membuat "keytab" untuk digunakan, bukan kata sandi.

    $ ktutil
    ktutil: addent -password -p your_principal -k 1 -e aes256-cts-hmac-sha1-96
    Kata sandi untuk your_principal : *********
    ktutil: wkt keytab_file 
    ktutil:  CtrlD
    

    dan masuk menggunakan:

    $ kinit -kt keytab_file  your_principal
    
pengguna1686
sumber
Ini sepertinya cukup ideal untuk saya, tetapi sepertinya tidak berfungsi - saya berhasil masuk dengan Kerberos (tidak ada pesan kesalahan), tapi saya masih diminta kata sandi. Pesan kesalahan dari ssh -vvmirip dengan jejak saya diposting kecuali saya mendapatkan debug1: Unspecified GSS failure. Minor code may provide more information\n Server not found in Kerberos databasebukannya hal tentang file cache kredensial tidak ditemukan.
David Z
Ah, tampaknya "admin Windows-only clueless" mengatur keytab untuk host/sftp.pass.psu.edu, tetapi nama aslinya seharusnya host/lutz.cac.psu.edu. Anda dapat menyiasatinya dengan menambahkan " 128.118.2.85 sftp.pass.psu.edu" ke / etc / hosts Anda, tetapi ini agak jelek - akan jauh lebih baik jika admin memperbaiki server ...
user1686
Ya, itu akan ... Saya akan bertanya kepada mereka tentang hal itu, tetapi untuk sekarang mudah-mudahan perbaikan Anda harus menyelesaikan masalah. Saya akan mencobanya besok.
David Z
@ David Zaslavsky: Mungkin berguna untuk menyebutkan kepada mereka bahwa MIT Krb5 v1.10 mendukung beberapa prinsip host (yaitu keduanya host/lutz.cac.psu.edu dan host/sftp.pass.psu.edu) dalam keytab tunggal. (Versi sebelumnya hanya menggunakan yang pertama.)
user1686
Maaf saya lupa untuk kembali dan memberikan umpan balik tentang ini. Setelah memodifikasi /etc/hostsseperti yang disarankan saya dapatkan debug1: Unspecified GSS failure. Minor code may provide more information Generic error (see e-text). Tidak ada hal lain dalam output yang relevan dengan kesalahan.
David Z
3

Saya akan mempertimbangkan solusi campuran, di mana Anda memasukkan kata sandi sekali saja, dan komputer memelihara soket ke server SSH jarak jauh. Anda dapat mengikuti langkah-langkah ini untuk menyiapkan ControlMasterhanya karena alasan itu.

roguesys
sumber
Koneksi master akan direset ketika saya mematikan klien. Jadi ini bukan solusi yang ideal, tetapi itu akan sedikit perbaikan atas situasi saya saat ini.
David Z
Gunakan screenuntuk melindungi cangkang dari penghentian koneksi putus atau hangup.
LawrenceC