Ubuntu – Inputting a Password on a script for rsync to login to a remote server to complete rsync

16.04backupcronrsyncssh

I'm trying to make a .sh file that a cronjob will run occasionally that does an automatic rsync. This is how my file looks so far:

#!/bin/bash

subdir=`hostname`

rsync -ah -e 'ssh -p 48180' /home/user/test 
user@10.3.10.110:/var/www/html/xgplayer/events/"$subdir" -y

That is one command, had to cut it in half because it was too long for one line.

I have it set to create a subdirectory based off of the hostname of the machine (please tell me if that looks good too, I'm basing that off code used for a slightly different purpose) which that user does have access to. (I just called the users user for reasons, ignore that)

What my question is that will that -y have it automatically agree to store an ssh key like I'm trying to have it do? Also, how do I have it automatically input a password through the command I'm trying to execute in the ssh when it tries to login as that user to rsync the files? I thought there was something like — that could do that. Any help would be appreciated 🙂

I'm running Ubuntu Server 16.04 LTS on both machines if that helps.

Edit: Not to be super tricky, but whatever the solution is also has to be able to be put into a .sh file and run itself without user input, this is for a very specific task, sorry.

Edit 2: Doing this as per request of someone helping me, so, I can't provide screenshots unfortunately, but it asks for a password for a user on the 10.3.10.110 whenever I run the rsync command I listed, and whenever I run the ssh-keygen on a new client trying to generate a key for that user at that machine. The application I'm trying to use this for requires that this be automated completely which is why this is a problem.

Edit 2.5: Once I run the keygen and ssh-copy-id, it no longer prompts for a password at rsync, but this is going to be implemented across many machines, and for this project, I don't mind putting those in some kind of setup .sh file, but those commands require inputs which would need to be automated in order for me to use for my specific case.

Edit 3: I'm commenting a lot because I don't have enough rep to chat directly with the people trying to help me, new to this site still.

Best Answer

I found my own answer doing some more digging into it, I'll post the answer to how this can be completely automated along with a couple helpful links that helped me come to this:

#!/bin/bash


subdir=`hostname`

rsync -ah -e 'sshpass -p "password" ssh -p 48180 -o 
StrictHostKeyChecking=no' /var/www/html/xgplayer/events 
user@10.3.10.110:/var/www/html/xgplayer/events/"$subdir" 

That Rsync command is all one command. The links that helped:

https://unix.stackexchange.com/questions/33271/how-to-avoid-ssh-asking-permission https://unix.stackexchange.com/questions/111526/rsync-without-prompt-for-password (The second, higher voted answer ended up being more helpful than the "best" answer)

Also, obviously swap user and password with your user and password where need be, not posting them here obviously.

Thanks to everyone who tried helping, you guys did help steer me in the right directions for the most part! :)

Related Question