Saya perlu menggunakan sshpass
untuk meluncurkan perintah jarak jauh melalui SSH dari kode Java.
Jika saya secara manual mengetikkan konsol:
ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
berfungsi dengan baik, tetapi meminta kata sandi. Jadi saya mencoba berlari sshpass
:
sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh user@ipaddress echo 'OK'
dan tidak ada yang bekerja.
sumber
StrictHostKeyChecking=accept-new
.sshpass
hanya berfungsi jika prompt kata sandi berakhirassword:
.Jika prompt kata sandi Anda berbeda, Anda mungkin harus menyesuaikan kode sumber
sshpass
untuk mengenali prompt yang Anda miliki.Saya telah melihat permintaan kata sandi seperti
Password for user@host:
pada beberapa sistem, mungkin ini masalah Anda.sumber
-P prompt Which string should sshpass search for to detect a password prompt
Saya pikir Anda menginginkan sesuatu seperti:
Misalnya, ini berfungsi untuk saya:
sumber
Apakah Anda mengatur login tanpa kata sandi?
Login tanpa password dengan OpenSSH http://www.debian-administration.org/articles/152
sumber
Ada banyak cara untuk melakukan itu, inilah solusi yang saya sarankan:
Pertama-tama, menyimpan kata sandi Anda dalam suatu variabel adalah memberi Anda perintah yang lebih fleksibel.
sshpass
memiliki opsi untuk itu:-e
: opsi ini memungkinkan untuk membaca kata sandi dari$SSHPASS
variabel lingkunganAnda memiliki dua cara untuk mengatur variabel ini:
Ditetapkan langsung dalam kode Anda:
Atau tanyakan:
Daripada menjalankan perintah Anda;
Jika perintah Anda statis, jalankan langsung:
Jika perintah Anda akan digunakan dinamis seperti ini:
Semoga ini bisa membantu seseorang.
sumber
readPassword
fungsi, Anda hanya dapat menulis kata sandi Anda, itu harus bekerja :) Hanya saya ingin berbagi kode saya yang menunjukkan contoh menggunakansshpass
untuk perintah dinamis: Dsshpass
menggunakan terminal pseudo danman
halaman tersebut menyertakan permintaan maaf karena melanggar sesekali. Anda juga bisa mencobafd0ssh
. Ini berfungsi jika Anda tidak perlu mengirimstdin
ke proses pada mesin jarak jauh. Itu bekerja jika Anda hanya mengeluarkan perintah dan menangkap hasilnya.sumber
Sintaks sshpass adalah
Perhatikan bahwa tidak ada ruang antara -p dan kata sandi.
Juga saya perhatikan bahwa Anda harus terhubung dengan ssh setidaknya sekali secara manual untuk mendapatkan kunci RSA dari mesin yang Anda sambungkan, untuk masuk ke
~/.ssh/known_hosts
file sebelum sshpass akan memungkinkan Anda untuk terhubung.jadi setelah mendapatkan entri dalam file known_hosts saya bisa menjalankan perintah seperti
dan itu akan mengeksekusi perintah
uname -a
pada server jauh dan output hasilnya ke standar di mesin lokal.sumber
Yang Anda butuhkan adalah
-f -t -t -t
Selain itu Anda mungkin harus menghapus "Requiretty" dari sudo config (/ etc / sudoers) pada mesin remote.
sumber
buat kunci
ssh-keygen -t rsa
membuat folder .ssh di server jauh itu akan meminta kata sandi
ssh $USER@SEVERNAME mkdir -p .ssh
salin kunci ke server jarak jauh
cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'
Periksa apakah itu meminta kata sandi, jika tidak itu harus berfungsi.
sumber
@ Exuma memiliki contoh yang membuatnya bekerja untuk saya.
Kata sandi harus dalam bentuk
-pPassword
(tanpa spasi)mungkin juga diperlukan kutipan:
sshpass -p'Password&0' user@hostname
sumber