如何在局域网中通过 ssh 连接到 ipv6 ubuntu?

c2h*_*2h2 73 ssh ping ipv6 ubuntu

我可以通过命令 ping 我的 Ubuntu 框:(其中 c2h2ttt 列在 /etc/hosts 中)

c2h2@c2h2crawler:~/ttt$ ping6 -I eth1 c2h2ttt
PING c2h2ttt(c2h2ttt) from fe80::21b:21ff:fe22:e865 eth1: 56 data bytes
64 bytes from c2h2ttt: icmp_seq=1 ttl=64 time=10.3 ms
64 bytes from c2h2ttt: icmp_seq=2 ttl=64 time=2.06 ms
64 bytes from c2h2ttt: icmp_seq=3 ttl=64 time=1.33 ms
Run Code Online (Sandbox Code Playgroud)

当我尝试时,ssh -6 c2h2ttt它显示:

c2h2@c2h2crawler:~/ttt$ ssh -6 c2h2ttt
ssh: connect to host c2h2ttt port 22: Invalid argument
Run Code Online (Sandbox Code Playgroud)

正确的命令是什么?


在服务器端 /etc/ssh/sshd_config 有:

ListenAddress ::
ListenAddress 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

我能够通过端口 22 上的 ipv4 ssh 到 c2h2ttt。并且netstat -lnt | grep :22

root@c2h2think:~# netstat -lnt | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
Run Code Online (Sandbox Code Playgroud)

使用 ufw 并允许端口 22 上的任何入站流量

root@c2h2think:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
Run Code Online (Sandbox Code Playgroud)

以及 iptables 配置:

root@c2h2think:~# ip6tables -L -v -n
Chain INPUT (policy DROP 55 packets, 10758 bytes)
pkts bytes target     prot opt in     out     source               destination 
    0     0 ACCEPT     all      lo     *       ::/0                 ::/0        

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
    0     0 ACCEPT     all      *      lo      ::/0                 ::/0  
Run Code Online (Sandbox Code Playgroud)

Joh*_*n T 111

尝试指定 ssh 客户端的接口。ping6 实用程序允许您指定一个接口,但是 ssh 没有用于此的开关,您必须使用以下语法:

ssh -6 fe80::21b:21ff:fe22:e865%eth1

  • @MaxBeikirch 因为每个完全可操作的网络接口都会有一个 fe80: 地址。因此,系统不知道将流量发送到哪个接口。这是一个流量路由问题。对于其他地址,系统通常会做出明智的选择,因为计算机将路由分配到“附近”地址(即同一子网中的地址),但这不适用于 fe80:因为所有网络接口都是同一子网的一部分。 (10认同)
  • 试过了,对我也有用!为什么一定要指定接口? (3认同)
  • 哇,它起作用了,谢谢!仅仅因为eth1问题 (2认同)

小智 10

链接本地地址不应该用于 SSH,它们用于低级协议引导程序。如果您的网络上没有 ISP 提供的前缀,请从 fd00::/8 生成唯一的本地前缀:

http://en.wikipedia.org/wiki/Unique_local_address

  • 链路本地地址是网络地址。如果您想将它们用于 SSH,请继续。只知道如何处理任何并发症,就像这个问题和约翰 T 的回答所讨论的那样。我遇到过一个 ULA (fd00::/8) 没有按预期分配的情况。在这种情况下,使用本地链接 (fe80::/16) 的 SSH 效果很好。我避免链接本地只是因为处理路由的麻烦(需要指定接口),而不是因为地址在技术上发送或接收流量的能力较差。 (3认同)