我确信这是我的一个问题,我从根本上是误解。我使用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地址字符串吗?
答案 0 :(得分:0)
目前我正在计划提交PR的SSHKit存在错误。除非特别指出,否则基本上将尾随字节作为端口号吞并。
### 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>