如何让SSH使用非临时IPv6地址建立出站连接
如何让SSH使用非临时IPv6地址建立出站连接
嘿,这个需求太接地气了!带可路由IP的IPv6接口默认会生成临时地址用来出站,确实能提升隐私,但有时候我们就是需要固定用非临时的全局IPv6地址来连SSH,总不能每次都先手动查IP再用-b选项吧?下面给你几个实用的解决办法:
1. 动态获取非临时IP并直接连接
不用手动查IP,直接在SSH命令里嵌入获取地址的逻辑就行。假设你的出站网卡是eth0,执行这条命令:
ssh -b "$(ip -6 addr show dev eth0 scope global | grep -v 'temporary' | awk '/inet6/ {print $2}' | cut -d'/' -f1)" user@你的远程主机地址
简单拆解下逻辑:
ip -6 addr show dev eth0 scope global:列出eth0网卡上所有全局可路由的IPv6地址grep -v 'temporary':过滤掉带“temporary”标记的临时地址awk和cut:提取纯IPv6地址(去掉后面的前缀长度,比如/64)
如果你的网卡不是eth0,换成wlan0之类的实际名称就行。
2. 封装成别名,一键调用
觉得上面的命令太长?可以把它做成Shell别名,下次直接用。打开你的Shell配置文件(比如~/.bashrc或~/.zshrc),添加一行:
alias ssh-fixed6='ssh -b "$(ip -6 addr show dev eth0 scope global | grep -v "temporary" | awk "/inet6/ {print \$2}" | cut -d"/" -f1)"'
保存后执行source ~/.bashrc(对应你的配置文件),之后只要输入ssh-fixed6 user@远程主机,就会自动用非临时IPv6地址连接了。
3. 针对特定主机配置SSH规则
如果经常连某台特定服务器,可以在SSH配置文件里预设绑定规则。打开~/.ssh/config(没有就新建一个),添加类似这样的内容:
Host myserver HostName myserver.example.com User myusername BindAddress 2001:db8:xxxx:xxxx::xxxx
这里的BindAddress填你网卡的非临时IPv6地址就行。如果怕IP变动,也可以尝试用命令替换(注意部分SSH版本可能不支持,测试下再用):
Host myserver HostName myserver.example.com User myusername BindAddress $(ip -6 addr show dev eth0 scope global | grep -v 'temporary' | awk '/inet6/ {print $2}' | cut -d'/' -f1)
额外小技巧:怎么确认非临时IPv6地址?
执行ip -6 addr命令,找带scope global且没有tmpaddr或temporary标记的地址,比如:
inet6 2001:db8:1234::5678/64 scope global noprefixroute
而临时地址会是这样的:
inet6 2001:db8:1234::abcd/64 scope global temporary dynamic
备注:内容来源于stack exchange,提问作者Julien Oster
相关产品推荐
相关产品推荐

