menambahkan kata sandi ke .ssh / config

24

Saya menggunakan ubuntu 12.04. Saya menggunakan ssh untuk menghubungkan ke banyak server setiap hari, jadi saya menaruh parameternya di file .ssh / config ; seperti ini :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Apakah ada cara untuk memasukkan kata sandi dalam file ini, untuk setiap koneksi? Jadi ketika server meminta kata sandi, terminal meletakkan pass-nya dan mengirimkannya ke server, jadi saya tidak perlu mengetik kata sandi setiap kali. Juga, saya tidak ingin menggunakan pasangan kunci publik / pribadi.

Ajo Augustine
sumber
10
Inilah tujuan dari keypairs.
Michael Hampton

Jawaban:

31

Tidak, Tidak ada metode untuk menentukan atau memberikan kata sandi pada baris perintah secara non-interaktif untuk otentikasi ssh menggunakan mekanisme built-in openssh. Setidaknya tidak satu yang saya tahu. Anda dapat mengubah sandi kata sandi menjadi skrip ekspektasi, tetapi itu juga bukan solusi yang baik.

Anda pasti ingin menggunakan keypairs untuk otentikasi tanpa kata sandi seperti yang dinyatakan Michael, pada akhirnya kunci pribadi cukup banyak kata sandi besar dalam file.

Danila Ladner
sumber
Masalahnya, ini adalah server klien saya dan mereka tidak mengizinkan masuk menggunakan kunci. Saya sedang menulis skrip bash menggunakan ekspektasi untuk masuk ke semua server tempat kredensial disimpan dan diambil dari perangkat penyimpanan usb. Terima kasih
Ajo Augustine
1
Cukup tidak aman. Satu-satunya hal yang disarankan dalam skrip itu untuk mengunci file itu dengan izin file yang sulit.
Danila Ladner
1
Jika mereka tidak mengizinkan kunci, mereka salah mengerti bagaimana ssh bekerja - memungkinkan masuknya kata sandi membuka Anda terhadap serangan kamus, dll. Anda khawatir tentang kunci yang jatuh ke tangan yang salah Anda dapat mengenkripsi kata sandi bagian pribadi dari kunci sehingga Anda memerlukan dua faktor untuk dapat menggunakannya (kata sandi juga dapat diingat di gantungan kunci Anda / oleh agen ssh Anda )
Alex Berry
Didik klien Anda. Jelaskan mereka yang lebih baik untuk menonaktifkan otentikasi kata sandi dan hanya mengizinkan kunci yang sebaliknya.
Nikita Kipriyanov
20

Untuk menghindari serangkaian komentar: Ya, ini tidak aman (bahkan tidak bisa dibilang tidak aman). Saya akan sangat menyarankan Anda hanya melakukannya dalam situasi lab pada jaringan yang terisolasi atau situasi serupa yang tidak melibatkan server produksi atau server produksi potensial tanpa reset / format penuh.

Saya ingin mengatur ini karena saya tidak berpikir saklar 2950 saya mendukung kunci pribadi / publik dan saya berharap pada titik tertentu untuk mendapatkan pengetahuan itu, tetapi saya belum sampai.

Menggunakan alias dan sshpass ini bisa dilakukan.

  1. Instal sshpass
  2. Alter Anda .ssh / config file termasuk username seperti yang tercantum dalam pertanyaan
  3. Tambahkan alias ke terminal Anda (saya menggunakan .bashrc dan akan merekomendasikan pengaturan gloabl)
  4. Gunakan alias untuk masuk ke target

Contoh alias saya adalah:

alias ssc='sshpass -pcisco ssh'

Di mana "cisco" adalah kata sandi. Perhatikan tidak ada ruang antara -p dan kata sandi.

Penggunaan adalah (merujuk pertanyaan):

ssc server1

Catatan: Ini menjawab pertanyaan dalam judul hanya untuk mereka yang menggunakan mesin pencari. Jika Anda menggunakan server seperti contoh pertanyaan, pasangan kunci pribadi / publik dan bukan jawaban ini yang harus digunakan

DarkSheep
sumber
Satu-satunya solusi yang layak, ketika Anda benar-benar tidak dapat bekerja dengan kunci untuk alasan apa pun.
sjas
Bekerja! Luar biasa.
Rahul
Saya akan menyarankan mengganti alias dengan skrip shell lengkap; yang akan memberikan kesempatan untuk secara dinamis memilih file kata sandi yang akan digunakan tergantung pada parameter host.
7heo.tk
Seseorang mungkin bisa meletakkan spasi di antara -p dan kata sandi, seperti yang sering terjadi pada program-program
CLI
10

Ya, sebagaimana disebutkan di atas tidak ada cara untuk menyimpan kata sandi secara sederhana. Saya akan merekomendasikan menggunakan kunci ssh untuk otorisasi.

pertama, hasilkan kunci Anda:

ssh-keygen

Kemudian salin kunci di server / desktop Anda:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Itu saja. Anda tidak akan pernah diminta kata sandi lagi.

Saya juga merekomendasikan menghapus otorisasi kata sandi secara umum, tetapi itu terserah Anda.

Str82DHeaD
sumber
1
Terima kasih untuk referensi ke ssh-copy-id! Saya dulu menggunakan beberapa alat seperti sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"tetapi program ini lebih bersih dan membuat niat menjadi jelas.
masterxilo
3

Tidak ada cara untuk melakukan ini dengan ssh, tidak aman seperti yang bisa didapat.

Seperti yang disebutkan Danila, Anda dapat menggunakan skrip ekspektasi, tetapi saya tidak akan repot.

Aku ingin tahu apa yang ingin kamu capai? Apakah Anda ingin melompat dari satu server ke server lainnya? Dalam hal ini Anda ingin mengatur dan menggunakan ssh-agent di workstation Anda dan mengaktifkan meneruskan agen pada host target; dengan cara ini pertukaran kredensial dengan dialihkan ke agen lokal Anda tanpa harus menyalin kunci pribadi Anda.

Eddy
sumber
VisualStudio memiliki konsep token akses pribadi yang seperti kata sandi khusus aplikasi tempat fitur ini akan sangat membantu.
Spuder
1

Saya menggunakan skrip ini dari ~/.local/bindirektori

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Yang memungkinkan saya menentukan frasa sandi seperti #PS <password>dalam .ssh/configfile.

Namun, seperti semua orang mengatakan, lebih baik untuk digunakan ssh-keysdengan ssh-agentketika itu mungkin

mnach
sumber
0

Cara yang benar untuk menangani situasi ini adalah dengan menggunakan ssh-agent berbasis sesi. Begini caranya:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

Kata sandi akan tetap valid untuk sisa sesi. Anda hanya perlu menjalankan perintah pertama sekali, dan dapat menambahkan kunci sebanyak yang Anda inginkan setelah itu. Ketika sesi terbunuh, begitu juga agen sehingga tidak ada penyimpanan kata sandi yang sulit.

Terkejut bahwa setelah sekian lama jawaban ini tidak ada di sini!

pranalli
sumber
Alasan tidak ada kemungkinan bahwa poster itu secara spesifik mengatakan dia tidak ingin menggunakan pasangan kunci publik / pribadi.
Jenny D mengatakan Reinstate Monica
1
Saya merindukan itu, terima kasih. Maka saya akan menambahkan bahwa tidak menggunakan keypair untuk SSH adalah ide yang sangat, sangat buruk. Ini lebih aman dan lebih nyaman ... Saya akan mendesak OP untuk mempertimbangkan kembali. Menggunakan keypair tanpa kata sandi jauh lebih aman daripada tanpa keypair dan kata sandi. Tetapi, idealnya, seseorang akan menggunakan keypair dengan frasa sandi dan menggunakan langkah-langkah yang saya berikan jika / ketika mereka berada dalam sesi yang membutuhkan penyimpanan frasa sandi mereka.
pranalli
-1

Anda dapat melakukan ini dengan cara yang lebih aman dengan menggunakan sshpass

  1. Setel kata sandi Anda tanpa riwayat

    export PS = your_password ; history -d $ (history 1)

  2. Tetapkan alias host seperti di atas dalam ~ / .ssh / config

  3. Gunakan ssh pass untuk menggunakan variabel lingkungan dan login ke mesin yang diperlukan dalam satu perintah

sshpass -p $ PS ssh host_alias

Lingkungan Anda menyimpan kata sandi Anda dan berisiko bahwa skrip yang mengeksekusi dapat membocorkan kata sandi ini jika Anda tidak tahu apa yang sedang Anda jalankan

ashishWaghmare
sumber
Tidak, itu tidak aman. Dan itu sangat jelek.
7heo.tk
Bukankah itu "solusi" lebih lama dari masalahnya? Semua langkah ekstra itu, dan Anda masih harus mengetiksshpass -p $PS ...
Dan H