在下面的命令中,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