3

我的服务器中配置了很多接口,每个接口都连接到特定的网卡并具有单独的路由表。这些接口可以通过“netstat -a”命令来识别。

现在,我想执行仅连接到特定接口的 rsync 命令。我有这个要求,因为每个接口都将通过一个单独的隧道/路径,我想要一个特定的 rsync 命令通过指定的隧道同步文件。

具体来说,我想要一种指定接口名称的方法。

谢谢,莫汉。

4

4 回答 4

9

您可以--address=x.x.x.x在命令行上使用指定接口的地址。

我认为没有任何方法可以直接指定接口,但是该ip命令可以告诉您接口的地址,因此您可以使用以下内容:

IP=$(ip -4 -br addr show eth0 | awk '{split($3,a,"/"); print a[1]}')
rsyncd ... --address=$IP
于 2013-02-19T10:41:30.473 回答
1

我编写了这个小 perl 脚本来将接口名称转换为地址,将其保存为iftoip(或类似的)

#!/usr/bin/perl

use strict;
use warnings;
use IO::Interface::Simple;
use feature qw(say);

my $iface = shift;

my $if = IO::Interface::Simple->new($iface) or die "$!: $iface";
say $if->address;
exit 0;

你可以用 bash 做类似的事情:

iftoip() {
  ip addr show $1 | grep inet | awk '{print $2}' | cut -d'/' -f1
}

只需将以上 3 行添加到~/.bashrc并启动一个新的 shell 或source ~/.bashrc

运行它会产生:

v@juno:~$ iftoip ens33
10.251.17.94
v@juno:~$ iftoip ens34
192.168.78.128
v@juno:~$ echo "IP=$(iftoip ens33)"
IP=10.251.17.94
v@juno:~$ iftoip ens35 #perl
No such device: ens35 at /home/v/bin/iftoip line 10.

或者

v@juno:~$ iftoip ens35 #bash
Device "ens35" does not exist.    
于 2017-03-14T13:15:37.227 回答
0

这已经尝试使用 2 个接口,具有不同的子网并且有效。

rsync -avzP -e 'ssh -b 10.100.16.X' /var/tmp/ent1 10.100.16.X:/var/tmp/;

rsync -avzP -e 'ssh -b 10.100.20.X' /var/tmp/ent2 10.100.20.X:/var/tmp/ ;
于 2019-08-30T09:10:45.063 回答
-1

从客户端到服务器,通过 ssh 使用:

 rsync -avP -e 'ssh -b x.x.x.x' tmp/ server:tmp/
于 2018-05-22T08:09:16.087 回答