SSH使用IPv6

个人知识库

Author: 刘杰文, Date: Unknown, Categories: , Tags:

SSH使用IPv6

这件事情呢,害的是机灵鬼厉害。为什么呢?因为我发现正确答案很简单,自动生成的文件都暗示了,可惜我没往那方向上去想。

也是我呆,同样是配置,怎么就不试试呢?

给你们个表格看看,举例子的:

情景 IPv4的命令 IPv6的命令
简简单单的连接 ssh 192.168.138.202 -l usr1 ssh fe80::398c:e18c:11ab:b1db -l usr1
端口转发(正向) ssh -NL 10022:localhost:10023 usr1@192.168.138.202 ssh -6 -NL 10022:localhost:10023 usr1@[fe80::398c:e18c:11ab:b1db]
端口转发(反向) ssh -NR 10023:localhost:10022 usr1@192.168.138.202 ssh -6 -NR 10023:localhost:10022 usr1@[fe80::398c:e18c:11ab:b1db]

是哪个文件在暗示呢?known_hosts。如果你有用IPv6简简单单地连接过某个服务器,那么它记录的指纹会类似这样的:

fe80::398c:e18c:11ab:b1db ecdsa-sha2-nistp256 AAAAE2V...........

如果你还指定了端口,那么我们知道,在登录的时候端口是可以用:分隔接在IP后面的,这时候就变成了这样:

[127.0.0.1]:10023 ecdsa-sha2-nistp256 AAAAE2V.....
[::1]:10022 ecdsa-sha2-nistp256 AAAAE2VjZH

它在暗示,中括号相当于数学中的那个括号,可以提高识别优先级。

现在我们看到localhost是怎么解析的:

记得有个系统文件说明了localhost的指向,默认有两个常见的:127.0.0.1::1。这两个分别对应IPv4和IPv6。当你电脑只获取到IPv4时,它一般会被解析成127.0.0.1;当你电脑还获取到IPv6时,它一般会被解析成::1。当然,这也看软件怎么考虑的了。对于ssh,它比较奇葩,它可以识别出应当匹配的localhost地址,但在储存指纹时,使用IPv4的[localhost]:10022(127.0.0.1:10022)[127.0.0.1]:10022(127.0.0.1:10022)会被分别储存;使用IPv6也同理:[localhost]:10022([::1]:10022)[::1]:10022([::1]:10022)。所以在使用localhost这件事情上,看你怎么选择了。

不过,ssh也是可以指定使用什么协议的。例如:

使用ssh -4 localhost会被解析成ssh 127.0.0.1,使用ssh -6 localhost会被解析成ssh ::1

为此,上面的端口转发样例可以被改写成这样:

情景 IPv4的命令 IPv6的命令
端口转发(正向) ssh -NL 10022:127.0.0.1:10023 usr1@192.168.138.202 ssh -6 -NL 10022:[::1]:10023 usr1@[fe80::398c:e18c:11ab:b1db]
端口转发(反向) ssh -NR 10023:127.0.0.1:10022 usr1@192.168.138.202 ssh -6 -NR 10023:[::1]:10022 usr1@[fe80::398c:e18c:11ab:b1db]

关于使用IPv6进行SSH操作,需要注意的基本就这些了。