Script Shell untuk masuk ke server ssh

29

Saya mencoba menulis skrip shell yang dapat melakukan login otomatis ke server ssh menggunakan kata sandi yang disebutkan dalam skrip. Saya telah menulis kode berikut:

set timeout 30
/usr/bin/ssh -p 8484 [email protected]
expect 
{
   "[email protected]'s password" 
   {
      send "password\r" 
   }
}

Kode ini tidak berjalan dengan benar, masih meminta kata sandi. Adakah yang bisa membantu saya menyelesaikan ini?

pradeepchhetri
sumber
2
Terkait:
kirimkan
serverfault.com/questions/241588/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

36

Saya pernah menulis expectskrip untuk masuk ke server ssh (seperti kasing Anda) dan skrip saya kira-kira seperti ini:

#!/usr/bin/expect

spawn ssh [email protected]
expect "password"
send "MyPassword\r"
interact

Saya pikir mungkin interactada yang hilang dalam skrip Anda.

Saeedn
sumber
ini benar-benar berfungsi dengan baik untuk saya dan saya terjebak di tempat ini, interaksi menyediakan terminal interaktif dengan prompt, tetapi saya mencoba untuk mengotomatiskan langkah-langkah lebih lanjut seperti lakukan cddan lsdan baca isi file juga. Apakah mungkin dilakukan setelah berinteraksi? Tolong balas
Hansiemithun
@Hansie Anda dapat mengirim lsperintah setelah login. Misalnya setelah mengirim kata sandi, lakukan expectdengan teks prompt perintah (untuk memastikan Anda masuk), lalu send "ls\r". Semua ini terjadi sebelumnya interact.
saeedn
pertanyaannya sedikit salah dan saya minta maaf setelah melakukan ls dan membaca isinya, saya dapat mencetak yang sama. Tetapi bagaimana cara mendapatkan dari sesi ssh menjadi variabel untuk diakses dari mesin lokal. ref: stackoverflow.com/questions/32341234/expect-script-return-value . Tetapi output tidak bekerja untuk saya. Pertanyaan saya diposting: stackoverflow.com/questions/51628465/… . Saya perlu file_listsetelah keluar untuk mengakses dari command prompt lokal
Hansiemithun
31

Anda melakukannya dengan cara yang salah. Apa yang ingin Anda lakukan adalah menghasilkan pasangan ssh-key tanpa kata sandi dan kemudian (selama server mendukung otentikasi kunci RSA) Anda dapat masuk tanpa harus mengetikkan kata sandi untuk semua. Ini adalah risiko keamanan jika kunci pribadi Anda disimpan di suatu tempat yang bisa dicuri.

Ikuti langkah ini:

  1. mkdir -p ~/.ssh
  2. cd ~/.ssh
  3. ssh-keygen -type dsa -i mysshkeys
  4. Tekan Returnsaat diminta frasa sandi
  5. Tekan Returnkedua kalinya untuk mengonfirmasi.

Sekarang akan ada dua file di ~/.sshdirektori Anda , mysshkey.pubdan mysshkey. mysshkey.pubadalah kunci publik Anda, ini aman untuk diletakkan di server jarak jauh. mysshkeyadalah kunci tanpa kata sandi pribadi Anda, tidak aman untuk diletakkan di server jarak jauh (atau di tempat orang lain bisa mendapatkan salinannya).

Di server Anda ingin SSH ke:

  1. Login ke server jarak jauh
  2. mkdir -p ~/.ssh
  3. Salin dan tempel konten mysshkey.pubke~/.ssh/authorized_keys
  4. Pastikan bahwa ~/.ssh/authorized_keysyaitu chmod'd ke600

Sekarang, untuk menjalankannya di mesin lokal Anda, Anda menjalankan perintah berikut:

ssh -i ~/.ssh/mysshkey <remote_server_ip>

Dan Anda akan masuk tanpa diminta kata sandi.

Ini adalah metode yang jauh lebih disukai untuk mengelola login otomatis karena Anda tidak akan mengkodekan kata sandi Anda di banyak tempat yang perlu diperbarui jika Anda pernah mengubahnya.

synthesizerpatel
sumber
2
Saya akan menggunakan kunci RSA daripada DSA. Tapi selain itu, setuju sepenuhnya.
glglgl
12
terkadang Anda tidak dapat menambahkan kunci ke host jarak jauh, mis. peralatan jaringan.
DarkHeart
1
Saya mencoba ini. ssh masih meminta kata sandi. Apakah Anda secara khusus harus memberikan alamat IP? Saya mencobanya dengan <user> @ <domain-name> dan hanya nama domain.
Jay Bienvenu
Perintah ini mengatakan terlalu banyak argumen? (untuk langkah 3)
Joseph Astrahan
Saya harus mengubah ke ssh-keygen -t dsa dan secara manual memasukkan lokasi file.
Joseph Astrahan
20

Pada distribusi berbasis Debian, sshpasspaket menyediakan cara yang lebih mudah untuk melakukan apa yang Anda inginkan. Paket ini tersedia untuk banyak distribusi populer lainnya. Anda harus mengaturnya terlebih dahulu:

echo 'YourPassword' > passwordFile.txt
chmod 600 passwordFile.txt

Kemudian aktifkan perintah SSH dari skrip seperti ini:

sshpass -f /path/to/passwordFile.txt /usr/bin/ssh -p 8484 [email protected]

Ini memberikan lebih banyak fleksibilitas, seperti jika Anda menggunakan lokal yang berbeda atau perlu mengubah kata sandi, daripada menggunakan solusi expect.

likeitlikeit
sumber
7

Pertama instal sshPass sudo apt-get install sshpass

Kemudian buat alias di file .bashrc sebagai

alias sshLogin='sshpass -p <your ssh password> ssh username@remote_host'

Sekarang muat ulang file .bashrc Anda yang telah diubah source ~/.bashrc

Anda sudah selesai.

Sekarang Anda dapat menjalankan ssh menggunakan alias yang dibuat di atas sshLogindi terminal.

bpathak
sumber
5

Anda bisa menggunakan ini:

sshpass -p 'yourpassword'  ssh user@ip
Behrooz Mohamadi nasab
sumber
2

Semua yang Anda butuhkan untuk membuat kunci hash dan menyimpannya di PC Anda

Ketik saja

ssh-keygen -t rsa -b 4096 # just press Enter till the end

lalu masuk

ssh-copy-id <user>@<server>

lalu login secara normal menggunakan

ssh <user>@<server>

Sekarang Anda tidak perlu kata sandi

Catatan: Menyimpan kata sandi Anda dalam teks biasa berbahaya

Metode ini menciptakan nilai hash kata sandi Anda menggunakan RSA dengan kunci publik panjang 4096 yang sangat aman.

Mohammad Hizzani
sumber
1
Ini tampaknya merupakan pengulangan dari jawaban ini .
roaima
#roaima Ya, tapi itu juga menyarankan perintah yang sangat berguna ssh-copy-id, yang tidak disebutkan orang lain. Saya memilih untuk itu.
Huw Walters
1

SSH Passwordless Login Menggunakan SSH Keygen dalam 5 Langkah Mudah :

Pengaturan lingkungan: masukkan deskripsi gambar di sini

Langkah 1: Otentikasi SSH-Kegen Keys on - (192.168.0.12)
Login pertama ke server 192.168.0.12 dengan pengguna dan hasilkan sepasang kunci publik menggunakan perintah berikut.

masukkan deskripsi gambar di sini

Langkah 2: Buat direktori .ssh di - 192.168.0.11
Gunakan SSH dari server 192.168.0.12 untuk menghubungkan server 192.168.0.11 untuk membuat direktori .ssh di bawahnya, menggunakan perintah berikut.

masukkan deskripsi gambar di sini

Langkah 3: Unggah Generalized Public Keys ke - 192.168.0.11
Gunakan SSH dari server 192.168.0.12 dan unggah kunci publik baru yang dihasilkan (id_rsa.pub) di server 192.168.0.11 di bawah .sshdirektori pengguna sebagai nama file yang diotorisasi.

masukkan deskripsi gambar di sini

Langkah 4: Aktifkan Izin pada - 192.168.0.11
Karena versi SSH yang berbeda pada server, kita perlu mengatur izin pada .sshdirektori dan authorized_keysfile.

masukkan deskripsi gambar di sini

Langkah 5: Masuk dari 192.168.0.12 ke 192.168.0.11 Server tanpa kata sandi
Mulai sekarang dan seterusnya kita dapat masuk ke 192.168.0.11 sebagai pengguna sheena dari server 192.168.0.12 sebagai pengguna tecmint tanpa kata sandi.

masukkan deskripsi gambar di sini

Premraj
sumber
Terima kasih ... ini bekerja untuk saya, kecuali pada langkah 4 saya mendapat "peringatan" dramatis: "FILE KUNCI PRIVATE YANG TIDAK DILINDUNGI! ... ... /. Ssh / id_rsa 'terlalu terbuka. ... kunci pribadi akan diabaikan ... izin buruk ". Saya lakukan chmod 700 id_rsadi direktori .ssh di server (klien, yaitu 192.168.0.12 dalam contoh Anda): menyelesaikan masalah
mike rodent
2
Tolong jangan memposting gambar teks .
roaima
1

Seperti yang sudah dijelaskan dalam jawaban lain, saya juga menggunakan sshpasstetapi saya menggabungkannya dengan readperintah untuk menyimpan kata sandi saya dalam variabel lingkungan sementara. Dengan cara ini kata sandi saya tidak pernah ditulis dengan jelas. Ini adalah perintah satu baris yang saya gunakan:

read -s PASS; sshpass -p $PASS ssh <user>@<host adress>

Setelah itu Anda harus memasukkan kata sandi Anda (tidak ada yang muncul di layar) dan kemudian menekan enter akan membuka koneksi.

StormRider
sumber
0

Saya baru-baru ini melakukan ini, ini dapat membantu Anda:

sshpass -p 'password' username@ipaddress

jika ini tidak berhasil maka Anda harus membuat kunci di mesin lain yang ingin Anda sambungkan

ssh-keygen

itu akan menghasilkan kunci pribadi dan publik dan meminta Anda untuk lokasi, biarkan kosong itu akan menyimpan kunci dalam folder .ssh secara default akan meminta Anda untuk passphrase, Anda juga dapat membiarkannya kosong masuk folder .ssh dan mengubah nama kunci publik ke 'otor_keys'

cd .ssh/
mv id_rsa.pub authorized_keys
useradd -d /home/username username

ini akan menambah pengguna ke daftar sekarang pergi ke direktori home dan berikan izin dan restart layanan sshd

chmod 700 /home/username/.ssh
chmod 644 /home/username/.ssh/authorized_keys
chown root:root /home/dozee
sudo service sshd restart

sekarang Anda harus memindahkan kunci pribadi ke sistem di lokasi itu dari tempat Anda menjalankan perintah ssh, maka Anda dapat terhubung dengan

sshpass -p 'password' ssh -i id_rsa username@ip

jika bahkan itu tidak berhasil maka masuk / etc / ssh buka sshd_config dengan editor vim periksa apakah pubkeyAuthenticatoin berubah menjadi ya atau tidak, jika tidak mengubahnya ke ya, restart layanan sshd dan kemudian coba, pasti akan bekerja .

Utkarsh Gupta
sumber
0

Argumen pertama adalah nama host dan yang kedua adalah kata sandi.

     #!/usr/bin/expect
     set pass [lindex $argv 1]
     set host [lindex $argv 0]
     spawn ssh -t root@$host echo Hello
     expect "*assword: "
     send "$pass\n";
     interact

Eksekusi: ./script.expect

Shivam Mehrotra
sumber