【问题标题】:Ruby sshkit IPv6 string addressing issuesRuby sshkit IPv6 字符串寻址问题
【发布时间】:2026-01-21 11:35:01
【问题描述】:

我确定这是我从根本上误解的问题。我正在使用sshkit 连接并上传一些文件到具有 IPv6 寻址的服务器。

我可以通过 SSH 连接到具有如下地址的服务器:

2001:aaa:bbb:cc:dddd:eeee:ffff:gggg

在我尝试利用 sshkit 做同样的事情之前,没有任何问题。下面的例子说明了相同的 IPv6 字符串是如何在我正在运行的脚本中的一个数组(有很多地址)中表示的:

on ["[2001:aaa:bbb:cc:dddd:eeee:ffff:gggg]"], in: :parallel do |host| #some stuff end

我最终看到的是:

Exception on host 2001:aaa:bbb:cc:dddd:eeee:ffff caught: getaddrinfo: nodename nor servname provided, or not known

注意尾随字节似乎被截断了?我应该以其他方式格式化 IPv6 地址字符串吗?

【问题讨论】:

    标签: ruby capistrano capistrano3 sshkit


    【解决方案1】:

    目前 SSHKit 存在一个错误,我打算提交 PR。除非特别指出,否则尾随字节基本上被吞下为端口号。

    ### Without port number, it parses incorrectly
    SSHKit::Host.new '[2001:db8:85a3:8d3:1319:8a2e:370:7348]'
     # => #<SSHKit::Host:0x007fc12318d7d8 @keys=[], @local=false, @user=nil, @hostname="2001:db8:85a3:8d3:1319:8a2e:370", @port=7348>
    

    解决方法是指定端口

    ### With port number it works
    SSHKit::Host.new '[2001:db8:85a3:8d3:1319:8a2e:370:7348]:22'
     # => #<SSHKit::Host:0x007fc1231e46c8 @keys=[], @local=false, @user=nil, @hostname="2001:db8:85a3:8d3:1319:8a2e:370:7348", @port=22>
    

    【讨论】: