SSH, Bash-script, som automatiskt kopierar en fil, utan lösenord

Permalänk

SSH, Bash-script, som automatiskt kopierar en fil, utan lösenord

Hejsan!
Jag håller på med en linux uppgift där jag arbetar just nu med SSH. Jag har lite svårt att greppa hur jag ska gå tillväga för att lösa en uppgift där jag ska skriva ett bash-script som automatiskt kopierar över en fil mellan två system.

uppgiften:
Skriv ett bash-script som automatiskt kopierar över en fil, testfil.txt, mellan två datorer utan att användaren ska behöva interagera med tex ett lösenord. Vilka åtgärder måste du göra innan för att detta ska fungera? Lösningen ska också vara säker i så måtto att inga lösenord får finnas någonstans i klartext.

Jag har kommit så långt att jag klarar av att kopiera en fil från ett system till ett annat via SSH.då använder jag mig av scp.

scp laptop@laptop-linux:/home/laptop/testfil.txt /server som kopierar filen till mappen server

scp server@server-Virtual-Machine:/home/server/testfil2.txt . som kopierar filen till den mappen man är i när man kör kommandot.

jag har en laptop med linux som os (laptop@laptop-linux)
en virtuell linuxburk (server@server-Virtual-Machine)

jag har läst en del på nätet men får inte riktigt grepp hur jag ska tänka.

ska jag använda expect?
spawn scp?
ska jag använda sshpass?
#!/bin/bash eller #!/usr/bin/expect -f
hur ska jag gå tillväga för att inte behöva skriva in något lösenord? antar att man skriver det i scriptet bara.

hur skulle ett exempel kunna se ut för ett sånt script?

Trevlig helg!
MVH

Permalänk

hittade ett exempel på nätet som kanske är på rätt bana?

#!/bin/bash
#Setup a few static variables

HOST_IP="1.1.1.1"
REMOTE_IP="2.2.2.2"
SCP\_PASSWORD\_E="eW91IGFyZSBjdXJpb3VzLCBhcmVuJ3QgeW91PyA6LSkK"
SCP_PASSWORD=`echo "$SCP_PASSWORD_E" | base64 -di`

#Remote execution of a command that collects data and saves it to a file - you can do whatever you want here
ssh user@$REMOTE_IP 'for i in `find /var/lib/mysql/database/ -type f | egrep -vi ".trn|.frm|.trg" | sort`; do e=`md5sum "$i"`; echo "$e" >> /tmp/my.file; done'

#And now transfer the file over
expect -c "
set timeout 1
spawn scp user@$REMOTE_IP:/tmp/my.file user@$HOST_IP:/home/.
expect yes/no { send yes\r ; exp_continue }
expect password: { send $SCP_PASSWORD\r }
expect 100%
sleep 1
exit
"
if [ -f "/home/my.file" ]; then
echo "Success"
fi

#Carry on with the code ...

förstår inte riktigt den här delen, någon som kan förklara den här delen?
SCP\_PASSWORD\_E="eW91IGFyZSBjdXJpb3VzLCBhcmVuJ3QgeW91PyA6LSkK"
SCP_PASSWORD=`echo "$SCP_PASSWORD_E" | base64 -di`

Permalänk
Medlem

Att skriva lösenordet i bash-filen är inte att lösa uppgiften "utan lösenord". Att hasha lösenordet är iofs en väg att gå men bäst är helt klart om du kan använda ssh-nyckel istället.

Visa signatur

Det finns bara två sorters hårddiskar: de som har gått sönder och de som skall gå sönder.

Permalänk
Medlem

Hashat är nästan lika illa som klartext; får någon tag på scriptfilen så har de fri lejd till kontot.
https://debian-administration.org/article/530/SSH_with_authen...

Visa signatur

Desktop: AMD 3950X, 64 GB RAM, Nvidia 4070 ... (Windows 11)
Serverdesktop: AMD 5600G, 64 GB RAM (Proxmox)
Labbmiljö: Supermicro SC825 X9DRi-F 2xE5-2667v2 64GB RAM
Kamera: Canon R5, Canon RF 100-500, Laowa 100mm f/2.8, Canon RF 24-70 f/2,8

Permalänk
Medlem

Jag hade nog använt mig av SSH nycklar och en config fil. Config filen är även smidigare än att skriva en massa saker i bash scriptet. SSH nycklar är bra mycket smidigare än lösenord och kräver inget lösenord från användaren om dem ligger olåsta
Config file

SSH keys

Permalänk

@cheben: okej jag förstår. men uppgiften säger dock att det ska vara ett bash-script..
ska kolla vidare på det du länkat! tack så mycket för tipsen!

Permalänk

@zarkov:

okej! men då får jag försöka skriva ett script som bara ska kopiera över en fil från ett system till ett annat. och försöka använda SSH-nyckel istället, får kolla vidare på hur SSH-nycklarna funkar. tack för tipsen iaf (y)