mirror of
				https://github.com/mail-in-a-box/mailinabox.git
				synced 2025-10-30 18:50:53 +00:00 
			
		
		
		
	feat(rsync-port): Add support for non-standard ssh port for rsync backup
This commit is contained in:
		
							parent
							
								
									3314c4f7de
								
							
						
					
					
						commit
						142e9bd974
					
				| @ -213,9 +213,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. | ||||||
| @ -408,6 +417,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 + '/' | ||||||
| @ -416,11 +433,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
	
	Block a user