Merge pull request #15 from hughsw/add-custom-rsync-port
feat(rsync-port): Add support for non-standard ssh port for rsync backup
This commit is contained in:
commit
2921a77edc
|
@ -216,9 +216,18 @@ def get_duplicity_additional_args(env):
|
||||||
config = get_backup_config(env)
|
config = get_backup_config(env)
|
||||||
|
|
||||||
if get_target_type(config) == 'rsync':
|
if get_target_type(config) == 'rsync':
|
||||||
|
# Extract a port number for the ssh transport. Duplicity accepts the
|
||||||
|
# optional port number syntax in the target, but it doesn't appear to act
|
||||||
|
# on it, so we set the ssh port explicitly via the duplicity options.
|
||||||
|
from urllib.parse import urlsplit
|
||||||
|
try:
|
||||||
|
port = urlsplit(config["target"]).port
|
||||||
|
except ValueError:
|
||||||
|
port = 22
|
||||||
|
|
||||||
return [
|
return [
|
||||||
"--ssh-options= -i /root/.ssh/id_rsa_miab",
|
f"--ssh-options= -i /root/.ssh/id_rsa_miab -p {port}",
|
||||||
"--rsync-options= -e \"/usr/bin/ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p 22 -i /root/.ssh/id_rsa_miab\"",
|
f"--rsync-options= -e \"/usr/bin/ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p {port} -i /root/.ssh/id_rsa_miab\"",
|
||||||
]
|
]
|
||||||
elif get_target_type(config) == 's3':
|
elif get_target_type(config) == 's3':
|
||||||
# See note about hostname in get_duplicity_target_url.
|
# See note about hostname in get_duplicity_target_url.
|
||||||
|
@ -413,6 +422,14 @@ def list_target_files(config):
|
||||||
rsync_fn_size_re = re.compile(r'.* ([^ ]*) [^ ]* [^ ]* (.*)')
|
rsync_fn_size_re = re.compile(r'.* ([^ ]*) [^ ]* [^ ]* (.*)')
|
||||||
rsync_target = '{host}:{path}'
|
rsync_target = '{host}:{path}'
|
||||||
|
|
||||||
|
# Strip off any trailing port specifier because it's not valid in rsync's
|
||||||
|
# DEST syntax. Explicitly set the port number for the ssh transport.
|
||||||
|
user_host, *_ = target.netloc.rsplit(':', 1)
|
||||||
|
try:
|
||||||
|
port = target.port
|
||||||
|
except ValueError:
|
||||||
|
port = 22
|
||||||
|
|
||||||
target_path = target.path
|
target_path = target.path
|
||||||
if not target_path.endswith('/'):
|
if not target_path.endswith('/'):
|
||||||
target_path = target_path + '/'
|
target_path = target_path + '/'
|
||||||
|
@ -421,11 +438,11 @@ def list_target_files(config):
|
||||||
|
|
||||||
rsync_command = [ 'rsync',
|
rsync_command = [ 'rsync',
|
||||||
'-e',
|
'-e',
|
||||||
'/usr/bin/ssh -i /root/.ssh/id_rsa_miab -oStrictHostKeyChecking=no -oBatchMode=yes',
|
f'/usr/bin/ssh -i /root/.ssh/id_rsa_miab -oStrictHostKeyChecking=no -oBatchMode=yes -p {port}',
|
||||||
'--list-only',
|
'--list-only',
|
||||||
'-r',
|
'-r',
|
||||||
rsync_target.format(
|
rsync_target.format(
|
||||||
host=target.netloc,
|
host=user_host,
|
||||||
path=target_path)
|
path=target_path)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,10 @@
|
||||||
<label for="backup-target-rsync-host" class="col-sm-2 control-label">Hostname</label>
|
<label for="backup-target-rsync-host" class="col-sm-2 control-label">Hostname</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" placeholder="hostname.local" class="form-control" rows="1" id="backup-target-rsync-host">
|
<input type="text" placeholder="hostname.local" class="form-control" rows="1" id="backup-target-rsync-host">
|
||||||
|
<div class="small" style="margin-top: 2px">
|
||||||
|
The hostname at your rsync provider, e.g. <tt>da2327.rsync.net</tt>. Optionally includes a colon
|
||||||
|
and the provider's non-standard ssh port number, e.g. <tt>u215843.your-storagebox.de:23</tt>.
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group backup-target-rsync">
|
<div class="form-group backup-target-rsync">
|
||||||
|
|
Loading…
Reference in New Issue