Sambungkan melalui SSH dan ketikkan kata sandi secara otomatis, tanpa menggunakan kunci publik

20

Server memungkinkan koneksi SSH, tetapi tidak menggunakan otentikasi kunci publik. Bukan dalam kemampuan saya untuk mengubah ini saat ini (karena kesulitan teknis, bukan organisasi) tetapi saya akan mendapatkannya sesegera mungkin!

Yang saya butuhkan sekarang adalah menjalankan perintah di server menggunakan akun lama + otentikasi kata sandi dari sebuah skrip . Yaitu, saya perlu melakukannya dengan cara yang tidak interaktif. Apa itu mungkin? Dan bagaimana saya melakukannya?

Klien yang akan menjalankan skrip menjalankan Ubuntu Server 8.04. Server menjalankan Cygwin dan OpenSSH.

Dihapus
sumber
2
Apa kesulitan teknis dengan mengaktifkan otentikasi berbasis kunci? Mungkin Anda seharusnya mengajukan pertanyaan itu sebagai gantinya, atau sebagai tambahan untuk pertanyaan ini.
Zoredache
1
Saya memintanya. :-) serverfault.com/questions/125842/... Saya hanya perlu rute pelarian untuk saat ini, karena saya telah membenturkan kepala saya pada yang itu untuk sementara waktu. Tapi tentu saja tujuan saya adalah membuatnya bekerja dalam jangka panjang.
Dihapus

Jawaban:

22

Ada utilitas linux yang disebut sshpass. Hal ini memungkinkan Anda untuk melakukan apa yang Anda inginkan dan akan mengambil kata sandi server baik sebagai argumen baris perintah, atau dari file (saya lebih suka cara ini, jadi saya tidak memiliki kata sandi server saya muncul di riwayat shell) dan Anda menggunakannya seperti itu:

sshpass -f file_with_password ssh user@server ls -la

Ini akan ssh ke server dan dijalankan ls -la. Satu hal, bagaimanapun, Anda harus secara manual ssh ke server terlebih dahulu (jika Anda belum melakukannya), sehingga server akan ditambahkan ke server Anda ~/.ssh/known_hosts. Jika Anda tidak melakukan itu, sshpasstidak akan berhasil.

solefald
sumber
2
Ini bukan bagian standar dari OpenSSH, dan secara harfiah tidak ada mesin saya (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) memilikinya ...
voretaq7
@ voretaq7: sshpass adalah proyek SourceForge: sourceforge.net/projects/sshpass
kevinarpe
1
@ KCArpe Saya pikir Anda melewatkan poin saya ("Seluruh dunia bukan mesin Linux Anda - cobalah untuk memilih solusi yang bekerja di tempat lain"). Menggunakan SSH_ASKPASSvariabel adalah solusi yang lebih umum yang bekerja pada sistem apa pun dengan OpenSSH, dan tidak perlu menginstal perangkat lunak tambahan. Bagi sebagian dari kita (di industri yang diatur) menginstal perangkat lunak baru memicu banyak pekerjaan administratif.
voretaq7
@ voretaq7 Menggunakan SSH_ASKPASStidak berfungsi pada semua sistem. Bahkan jika klien mendukungnya, itu tidak akan berfungsi jika server menggunakan keyboard-interactive. Saya sebenarnya menghadapi masalah itu ketika menulis skrip untuk mendistribusikan authorized_keysfile ke sejumlah mesin yang disematkan.
kasperd
8

Anda dapat menggunakan Harapkan untuk melakukan ini. Jelas, ini tidak disukai dari sudut pandang keamanan, karena itu akan mengharuskan Anda untuk menggunakan skrip yang berisi kata sandi Anda dalam plaintext. (Tapi saya tidak akan mengulangi poin itu sejak Anda mengatakan dalam pertanyaan Anda bahwa Anda berencana untuk menggunakan otentikasi kunci publik secepat mungkin!)

Mox
sumber
Ini sepertinya akan menyelesaikan masalah saya! Saya akan memeriksanya besok. Ini bukan solusi akhir, tetapi menawarkan keamanan. Ketika saya memikirkannya, jika pengguna skrip adalah satu-satunya yang diizinkan untuk membaca skrip. Maka itu akan seaman kunci pribadi saya yang juga "hanya" dilindungi oleh izin sistem file. Atau apakah saya melewatkan sesuatu?
Dihapus
Saya akan kembali dengan hasil besok. :-) Terima kasih telah menjawab!
Dihapus
Tampaknya berhasil. Tapi sshpass lebih mudah untuk IMHO kasus khusus ini.
Dihapus
7

Tergantung sedikit pada bahasa skrip yang Anda gunakan. Saya skrip hampir semuanya dengan python sekarang, di mana ini bukan masalah. Baik pyssh dan Paramiko, Anda cukup membuat skrip kata sandi tanpa repot.

Jika Anda bermaksud melakukannya dengan skrip (ba) sh dan menggunakan OpenSSH semakin sulit. OpenSSH secara eksplisit mencegah Anda dari memasukkan kata sandi pada baris perintah (karena semua pengguna dapat melihat baris perintah menggunakan sesuatu seperti ps -fe, yang merupakan mojo yang buruk). Dalam hal ini Anda harus berinteraksi langsung dengan program ssh dan memiliki dua opsi:

  • Anda dapat menulis sejumlah besar kode dukungan, menggunakan sesuatu seperti Harapkan.
  • Anda melakukan peretasan menggunakan variabel SSH_ASKPASS, menyuruhnya memanggil aplikasi yang mengembalikan kata sandi Anda dan menjalankan semuanya sebagai tugas batch untuk mencegahnya membaca dari terminal.
pehrs
sumber