GNU/Linux >> Belajar Linux >  >> Linux

Ssh – Bagaimana Menjalankan Ssh-add Secara Otomatis, Tanpa Prompt Kata Sandi?

Saya ingin berkomunikasi antara beberapa komputer di jaringan saya (Ethernet statis), melalui SSH. Untuk melakukan itu saya perlu menjalankan ssh-add setiap kali saya masuk pada mesin tertentu, bagaimana saya bisa melakukannya sehingga itu diatur sekali dan tidak meminta saya untuk frasa sandi setiap kali saya masuk atau reboot mesin saya?

Saya tahu bahwa Anda harus menambahkan beberapa baris ke bash_profile file, tetapi saya masih perlu mengetikkan kata sandi setiap kali saya reboot/login ke mesin tertentu.

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Jawaban yang Diterima:

Ini adalah contoh khas dari trade-off antara keamanan dan kenyamanan. Untungnya ada beberapa pilihan. Solusi yang paling tepat bergantung pada skenario penggunaan dan tingkat keamanan yang diinginkan.

ssh-key dengan frasa sandi, tidak ssh-agent

Sekarang frasa sandi harus dimasukkan setiap kali kunci digunakan untuk otentikasi. Meskipun ini adalah opsi terbaik dari sudut pandang keamanan, ia menawarkan kegunaan terburuk. Ini juga dapat menyebabkan pemilihan frasa sandi yang lemah untuk mengurangi beban memasukkannya berulang kali.

ssh-key dengan frasa sandi, dengan ssh-agent

Menambahkan yang berikut ke ~/.bash_profile akan secara otomatis memulai ssh-agent dan muat ssh-key(s) saat login:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
  ssh-add
fi

Sekarang frasa sandi harus dimasukkan pada setiap login. Meskipun sedikit lebih baik dari perspektif kegunaan, ini memiliki kelemahan yaitu ssh-agent meminta frasa sandi terlepas dari apakah kunci akan digunakan atau tidak selama sesi login. Setiap login baru juga memunculkan ssh-agent yang berbeda instance yang tetap berjalan dengan kunci yang ditambahkan di memori bahkan setelah logout, kecuali dimatikan secara eksplisit.

Untuk membunuh ssh_agent saat logout, tambahkan berikut ini ke ~/.bash_logout

if [ -n "$SSH_AUTH_SOCK" ] ; then
  eval `/usr/bin/ssh-agent -k`
fi

atau berikut ini ke ~/.bash_profile

trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0

Membuat beberapa ssh-agent contoh dapat dihindari dengan membuat soket komunikasi persisten ke agen di lokasi tetap dalam sistem file, seperti dalam jawaban Collin Anderson. Namun, ini merupakan peningkatan dari memunculkan beberapa instance agen, kecuali jika secara eksplisit dimatikan, kunci yang didekripsi masih tetap ada di memori setelah logout.

Di desktop, ssh-agents yang disertakan dengan lingkungan desktop, seperti Agen SSH Gnome Keyring, dapat menjadi pendekatan yang lebih baik karena biasanya dapat dibuat untuk meminta frasa sandi saat pertama kali kunci ssh digunakan selama sesi login dan simpan kunci pribadi yang didekripsi dalam memori hingga akhir sesi.

ssh-key dengan frasa sandi, dengan ssh-ident

ssh-ident adalah utilitas yang dapat mengelola ssh-agent atas nama Anda dan memuat identitas seperlunya. Itu menambahkan kunci hanya sekali saat dibutuhkan, terlepas dari berapa banyak terminal, ssh atau sesi login yang memerlukan akses ke ssh-agent . Itu juga dapat menambah dan menggunakan agen yang berbeda dan set kunci yang berbeda tergantung pada host yang terhubung, atau direktori ssh dipanggil. Ini memungkinkan untuk mengisolasi kunci saat menggunakan penerusan agen dengan host yang berbeda. Ini juga memungkinkan untuk menggunakan banyak akun di situs seperti GitHub.

Terkait:Php:imagecropaauto — Memotong gambar secara otomatis menggunakan salah satu mode yang tersedia

Untuk mengaktifkan ssh-ident , instal dan tambahkan alias berikut ke ~/bash_profile :

alias ssh='/path/to/ssh-ident'

ssh-key dengan frasa sandi, dengan keychain

keychain adalah utilitas kecil yang mengelola ssh-agent atas nama Anda dan
mengizinkan ssh-agent untuk tetap berjalan saat sesi login berakhir. Pada login berikutnya, keychain akan terhubung ke ssh-agent yang ada contoh. Dalam praktiknya, ini berarti bahwa frasa sandi harus dimasukkan hanya selama login pertama setelah reboot. Pada login berikutnya, kunci tidak terenkripsi dari ssh-agent yang ada contoh digunakan. Ini juga berguna untuk mengizinkan otentikasi RSA/DSA tanpa kata sandi di cron pekerjaan tanpa kunci ssh tanpa kata sandi.

Untuk mengaktifkan keychain , instal dan tambahkan sesuatu seperti berikut ke ~/.bash_profile :

eval `keychain --agents ssh --eval id_rsa`

Dari sudut pandang keamanan, ssh-ident dan keychain lebih buruk dari ssh-agent instans terbatas pada masa aktif sesi tertentu, tetapi mereka menawarkan tingkat kenyamanan yang tinggi. Untuk meningkatkan keamanan keychain , beberapa orang menambahkan --clear opsi untuk ~/.bash_profile mereka panggilan gantungan kunci. Dengan melakukan ini, frasa sandi harus dimasukkan kembali saat login seperti di atas, tetapi cron pekerjaan akan tetap memiliki akses ke kunci yang tidak terenkripsi setelah pengguna keluar. keychain halaman wiki memiliki lebih banyak informasi dan contoh.

kunci ssh tanpa frasa sandi

Dari sudut pandang keamanan, ini adalah opsi terburuk karena kunci pribadi sepenuhnya tidak terlindungi jika dibuka. Namun, ini adalah satu-satunya cara untuk memastikan bahwa frasa sandi tidak perlu dimasukkan kembali setelah reboot.

ssh-key dengan frasa sandi, dengan ssh-agent , meneruskan frasa sandi ke ssh-add dari skrip

Meskipun mungkin tampak seperti ide yang mudah untuk meneruskan frasa sandi ke ssh-add dari skrip, mis. echo "passphrase\n" | ssh-add , ini tidak semudah yang terlihat seperti ssh-add tidak membaca frasa sandi dari stdin , tetapi membuka /dev/tty langsung untuk dibaca.

Ini dapat diatasi dengan expect , alat untuk mengotomatisasi aplikasi interaktif. Di bawah ini adalah contoh skrip yang menambahkan kunci ssh menggunakan frasa sandi yang disimpan dalam skrip:

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact

Perhatikan bahwa karena frasa sandi disimpan dalam teks biasa dalam skrip, dari sudut pandang keamanan, ini hampir tidak lebih baik daripada memiliki kunci ssh tanpa kata sandi. Jika pendekatan ini akan digunakan, penting untuk memastikan bahwa expect skrip yang berisi frasa sandi memiliki izin yang ditetapkan untuk itu, sehingga hanya dapat dibaca, ditulis, dan dijalankan oleh pemilik kunci.


Linux
  1. Cara Mengatur Login SSH Tanpa Kata Sandi

  2. Bagaimana Cara Menjalankan Program Tertentu Sebagai Root Tanpa Prompt Kata Sandi?

  3. Cara Setup Rsync dengan SSH di UNIX/Linux (rsync tanpa password)

  1. Bagaimana cara meneruskan kata sandi ke su/sudo/ssh tanpa mengesampingkan TTY?

  2. Bagaimana saya bisa melakukan `git pull` tanpa memasukkan kembali kata sandi SSH saya?

  3. Bagaimana cara menjalankan skrip sebagai pengguna lain tanpa kata sandi?

  1. Ssh – Perlu Tty Untuk Menjalankan Sudo Jika Saya Bisa Sudo Tanpa Kata Sandi?

  2. MySQLdump tanpa kata sandi di cronjob

  3. Cara mengeksekusi perintah ssh dari jarak jauh perintah sudo tanpa kata sandi