有没有办法强制 duplicity 使用 IPv4 而不是 IPv6?

有没有办法强制 duplicity 使用 IPv4 而不是 IPv6?

在下面的命令中,example.com同时具有 IPv4 和 IPv6 地址,但 SSH 服务器仅监听 IPv4 地址。

有没有办法要求 duplicity 仅使用 IPv4?

duplicity --progress --ssh-options -oIdentityFile=./cloud.pem --encrypt-key=REDACTED --full-if-older-than 2W --include-filelist ./list.txt --exclude '**' --exclude /root/.cache/duplicity / sftp://example.com//mnt/duplicity/

答案1

SSH 默认为-当您只想尝试一个 IP 版本时,AddressFamily=any请将其切换为AddressFamily=inet(IPv4) 或(IPv6)。您可能需要在 中输入此类 ssh 选项,即使您已经在命令行中输入了。至少我的手册页仍然告诉我:AddressFamily=inet6~/.ssh/config-oIdentityFile=

如果需要,通过 ssh_config 文件提供更多主机特定选项。

它看起来像这样:

# cat ~/.ssh/config
Host example.com
  AddressFamily=inet
  IdentityFile=/path/to/certificate.pem

通过查看有效的该主机的配置:

ssh -G example.com | grep -i address
addressfamily inet

请注意在 duplicity 启动时可能发出的警告,因为我之前看到过它的非 OpenSSH 后端默默地错误处理 ssh 选项。

答案2

尽管上面的答案听起来是个非常好的解决方案,我只是想添加这一点。

没有针对此的全局 Python 开关,...

另一种方法是使用底层方法让您的 C 库优先使用 IPv4 或禁用 IPv6。这将因平台而异,但在使用 glibc 的 Linux 上,您可以编辑 /etc/gai.conf 以始终优先使用 IPv4 而不是 IPv6:

precedence ::ffff:0:0/96  100

如上所述https://serverfault.com/a/1134818/493381

相关内容