GNU/Linux >> Belajar Linux >  >> Linux

Ssh – Skrip Untuk Mengotomatiskan Scp Dalam Jaringan?

Saya memiliki jaringan yang penuh dengan mesin Linux. Di jaringan ini, saya memiliki pengguna sebagai pengguna1 dengan sandi sebagai sandi di semua mesin.

Saya memiliki skrip berikut untuk meletakkan file di direktori home user1 di semua mesin jaringan.

#!/usr/bin/expect -f

# connect via scp
spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do
spawn scp /home/user1/Desktop/filetobesent.txt [email protected]${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yesr"
exp_continue
}
-re ".*sword.*" {
exp_send "passwordr"
}
}
interact
done

Masalahnya adalah saya mendapatkan pesan kesalahan karena “can't read line. No such variable “. Namun, jika saya menggunakan alamat IP secara langsung alih-alih variabel baris, saya dapat mentransfer file.

Sunting :IPlistfile.txt berisi daftar alamat IP di jaringan saya. Setiap baris berisi satu alamat IP.

Jawaban yang Diterima:

Saya dapat memikirkan beberapa cara untuk melakukan ini, tetapi saya sangat menyarankan untuk menyiapkan sshless tanpa kata sandi akses, Anda akan berterima kasih kepada saya nanti.

1. Siapkan akses tanpa kata sandi ke mesin Anda.

Sejauh ini, ini adalah metode terbaik karena Anda pasti ingin terhubung ke mesin lagi dan ini akan membuat hidup Anda lebih mudah. Ini juga jauh, jauh lebih aman daripada opsi lain bahkan jika Anda memilih untuk menggunakan frasa sandi kosong karena Anda tidak akan membuang kata sandi yang tidak terenkripsi.

Pertama, buat ssh public publik kunci pada mesin Anda:

ssh-keygen -t rsa

Anda akan dimintai kata sandi yang akan diminta untuk Anda masukkan pertama kali Anda menjalankan perintah ssh setelah setiap login. Ini berarti bahwa untuk beberapa ssh atau scp perintah, Anda hanya perlu memasukkannya sekali. Namun demikian, Anda dapat membiarkannya kosong untuk mendapatkan akses tanpa kata sandi sepenuhnya.

Setelah Anda membuat kunci publik, salin (sebagai user1 ) ke setiap komputer di jaringan Anda :

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$ip 
done < IPlistfile.txt

Anda harus memasukkan kata sandi untuk setiap IP secara manual (kecuali jika Anda menggunakan salah satu solusi di bawah ini untuk langkah ini juga) tetapi setelah Anda melakukannya, Anda akan dapat menyalin file ke salah satu mesin ini dengan sederhana:

while read ip; do
  scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Jika Anda memiliki sshpass diinstal, Anda dapat mengotomatiskannya sehingga Anda tidak perlu mengetikkan sandi untuk setiap mesin:

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

2. Instal sshpass

Ini adalah program kecil yang bagus yang memungkinkan Anda untuk melewatkan ssh password sebagai parameter baris perintah. Ini, jelas, bukan solusi yang sangat aman dan saya sangat menyarankan Anda membaca bagian "Pertimbangan Keamanan" dari man sshpass .

Bagaimanapun, ini mungkin tersedia di repositori distribusi Anda, pada sistem berbasis Debian dapat diinstal dengan

sudo apt-get install sshpass

Saya tidak dapat memeriksa karena saya tidak memiliki mesin berbasis RedHat tetapi sejauh yang saya tahu dari pencarian di sini, itu harus dapat diinstal di Fedora dengan

sudo yum install sshpass

Setelah Anda menginstalnya, Anda cukup menjalankannya

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

-e opsi memberitahu sshpass untuk mendapatkan kata sandi dari SSHPASS variabel. Ini sedikit lebih aman daripada memberikannya sebagai parameter dengan -p pilihan.

Terkait:SSH dan izin direktori home?

PENTING:

Ini akan gagal secara diam-diam jika server yang Anda sambungkan tidak diketahui, jika kunci publiknya tidak disimpan di mesin Anda. Jika ini tampaknya tidak berhasil, cukup sambungkan sekali (ssh atau scp ) ke mesin jarak jauh dan menerima kunci publiknya.

3. Gunakan pscp sebagai gantinya

pscp adalah alternatif untuk scp yang menerima kata sandi sebagai parameter baris perintah. Pada sistem berbasis Debian, ini dapat diinstal dengan

sudo apt-get install putty-tools

Seperti yang saya katakan sebelumnya, saya tidak dapat memeriksanya tetapi harus dapat diinstal di Fedora dengan

sudo yum install putty

Anda kemudian dapat menyalin file Anda dengan

while read ip; do
  pscp -pw password /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Linux
  1. Ssh – Membatasi Pengguna Ssh/scp/sftp ke Direktori?

  2. Ssh – Melewati Kata Sandi ke Skrip?

  3. Spasi Untuk Variabel Dalam Skrip Bash?

  1. Ssh – Scp Melalui Banyak Host?

  2. Bagaimana Cara Scp Melalui Mesin Menengah??

  3. 11 Perintah "ssh" dan "scp" yang berguna di Linux

  1. Ssh – Skrip Shell Untuk Masuk Ke Server Ssh?

  2. Bagaimana cara menyalin output terminal?

  3. Bagaimana cara scp melalui mesin perantara?