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

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

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

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

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`

Trädvy Permalänk
Medlem
Plats
Långtbortistan
Registrerad
Mar 2007

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.

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

Trädvy Permalänk
Medlem
Plats
~
Registrerad
Jul 2001

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...

Fedora, i3wm, Ansible, Vim, git, LaTeX - allt som behövs för att göra mig nöjd.

Trädvy Permalänk
Medlem
Plats
Lund
Registrerad
Nov 2008

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

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

@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!

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

@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)