Cheers!
Every arrow in our quivers is helpful, but do beware of using SSH
tunnels for intensive TCP traffic. You're wrapping TCP in TCP. So it
might solve some problems really nicely, but may fail in strange ways
for…reasons.
To understand why you might care, remember that TCP brings flow control
to the table. And if you have two layers of flow control regulating one
flow, you might have an interesting time once the inner flow (rsync)
gets throttled by the outer flow (ssh) and inner flows thinks it's
saturated the link - then backs off too aggressively. If you're
equipment suffers from buffer bloat so much the worse.
If using a trivial percentage of the totally-not-at-all-saturated links,
then it doesn't become noticeable. EG a slow disk over a gigbit.
If you're looking for simple, and don't mind SSL, but without strong
key-management (because SSH didn't have it anyway), then tinc-vpn.org -
it prefers UDP, resorts to TCP, but doesn't GRE at all.
With that caveat aside, it's very helpful to see examples like this.
On 15/01/2022 20.21, backu...@kosowsky.org wrote:
When I travel for pleasure or business, my laptop (and Android phone)
are no longer on my local network, so BackupPC no longer is able to
see the devices and back them up.
One could use a VPN, but alternatively, I wrote some perl code that
can be inserted into the corresponding <host>.pl config.pl to backup
over an SSH tunnel on port <tunnel port> if the file
'.sshtunnel-<tunnelport>' exists in the corresponding
$TopDir/pc/<host> directory.
See the following code (and embedded notes).
---------------------------------------------------------------------------------------------------
my $jhost = $_[1]; #Note: $_[1] is the name of the file (as sourced by 'do')
my $SshUser = 'root';
my $SshPort = 22; #Port for sshd server on the remote machine (typically 22, or
2222 if non-priveleged)
$Conf{PingMaxMsec} = 400; #Necessary because otherwise get pings too slow
#Backup over SSH tunnel to allow backup of devices when they are not on local
network...
#Touch: TopDir/pc/<host>/.sshtunnel-<tunnelport> to enable backup over SSH tunnel
using port <tunnelport> (remember to DELETE when done!)
my ($TunnelPort) = map {/\.sshtunnel-([0-9]+)$/ ? $1 : (); }
</var/lib/backuppc/pc/$jhost/.*>;
if(defined $TunnelPort) { #If file containing TunnelPort exists in top level
host directory, then use it
#Rsync to localhost over SshPort = <tunnelport>
$SshPort = $TunnelPort;
$Conf{ClientNameAlias} = 'localhost';
#For backing-up/restoring remote host over port forwarded-reverse SSH
tunnel
#using <tunnelport> (e.g., when using over USB or remote internet)
# <BackupPC server>:<tunnelport> -> <remote host>:<Orig SshPort>
#From the remote host, ssh to BackupPC server using:
# -R <tunnelport>:localhost:<Orig SshPort>
#E.g., ssh -R <tunnelport>:localhost:22 -p 2222 <user>@<BackupPC server>
#Note: My windoze PuTTY app and android 'connectbot' app is configured to
automatically includes this port forward
#Alternatively, On BackupPC servers, ssh to remote host using:
# -L <tunnelport>:localhost:<Orig SshPort>
#E.g., ssh -L <tunnelport>:localhost:22 -p <Orig SshPort> <SshUser>@<remote
host>
#If you want to backup on server2 via server1, then you need to create a double port forward
# server2:<tunnelport> -> server1:<tunnelport> -> <remote host>:<Orig
SshPort>
# From, the remote host, use a proxy Jump:
# ssh -R <tunnelport>:localhost:22 -J <user1>@server1:2222
<user2>@server2
# Alternatively, first create one of the first port forwards to connect
'server1' and the remote host.
# Then create an aiddiontal port forward to connect 'server2' and 'server1'
# Either, ssh from server1 to server2 as follows:
# ssh -R <tunnelport>:localhost:<tunnelport> server2
#Or ssh from server2 to machine1 as follows:
# sudo -u backuppc ssh -L <tunnelport>:localhost:<tunnelport> -l
backuppc-client machine1
#Then you can log into the remote host from machine2 using:
# sudo -u backuppc ssh -p <tunnelport> <remoteUser>@localhost -o
UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
#Note Start from machine1, combine creating the machine1-machine2 port
with login from machine2 to remote host:
# ssh -t -R <tunnelport>:localhost:<tunnelport> machine2 "sudo -u backuppc ssh -l
backuppc-client -p <tunnelport> localhost -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no"
#Alternative ping command - ssh to remote client over $SshPort =
<tunnelport> and ping itself (i.e. ping localhost)
#Linux/Android ping: 'ping -c 1'
$Conf{PingCmd} = "$Conf{SshPath} -q -x -p $SshPort -l $SshUser -o
UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no localhost ping -c 1
localhost";
#Windows Cygwin ping: 'ping -n 1'
# $Conf{PingCmd} = "$Conf{SshPath} -q -x -p $SshPort -l $SshUser -o
UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no localhost ping -n 1
localhost";
#Note above needs double quotes since $sshPath for PingCmd is not set at
runtime
#Note: add options to ignore known_hosts and turn off
StrictHostKeyChecking since already running over a known ssh channel
# PLUS the known_hosts and keys will need to be added for every new
<tunnelport> used causing backuppc to wait and fail.
}
$Conf{RsyncSshArgs} = ['-e', "$Conf{SshPath} -p $SshPort -l $SshUser"];
#SshPort is typically 22 (or 2222 if non-privileged)
$Conf{RsyncSshArgs}->[1] .= " -o UserKnownHostsFile=/dev/null -o
StrictHostKeyChecking=no" if $TunnelPort;
#Note above needs double quotes since $sshPath for PingCmd is not set at runtime
#Note: add options to ignore known_hosts and turn off StrictHostKeyChecking
since already running over a known ssh channel
# PLUS the known_hosts and keys will need to be added for every new
<tunnelport> used causing backuppc to wait and fail.
_______________________________________________
BackupPC-users mailing list
BackupPC-users@lists.sourceforge.net
List: https://lists.sourceforge.net/lists/listinfo/backuppc-users
Wiki: https://github.com/backuppc/backuppc/wiki
Project: https://backuppc.github.io/backuppc/
_______________________________________________
BackupPC-users mailing list
BackupPC-users@lists.sourceforge.net
List: https://lists.sourceforge.net/lists/listinfo/backuppc-users
Wiki: https://github.com/backuppc/backuppc/wiki
Project: https://backuppc.github.io/backuppc/