4

我想通过 SSH 连接到远程 GNU+Linux 机器并执行命令,但使用 IPv6 地址。使用 IPv4 地址,它工作得非常好。

我在 Ubuntu 15.04 上运行并使用 MonoDevelop (Mono 4.0)

这是我使用 Renci SSH.NET 库的示例代码:

SshClient sshClient = new SshClient (ipV6Address, user, pass);
sshClient.Connect ();
SshCommand sshCmd = sshClient.RunCommand (command);
sshClient.Disconnect ();

我还尝试使用 Tamirs SshSharp 和终端控制。

添加[ ]到 IPv6 地址也不起作用。

我得到以下异常:

System.Net.Sockets.SocketException: Invalid arguments
at System.Net.Sockets.Socket+SocketAsyncResult.CheckIfThrowDelayedException () [0x00000] in <filename unknown>:0  
at System.Net.Sockets.Socket.EndConnect (IAsyncResult result) [0x00000] in <filename unknown>:0 
at Renci.SshNet.Session.SocketConnect (System.String host, Int32 port) [0x00000] in <filename unknown>:0 
at Renci.SshNet.Session.Connect () [0x00000] in <filename unknown>:0 
at Renci.SshNet.BaseClient.Connect () [0x00000] in <filename unknown>:0 
at main program...

也许有人可以为我提供一个代码示例(在 C# 中)或告诉我一个明确支持 IPv6 地址的库。该库应该是免费的(最好有 Apache 许可)并且可用于商业用途。

问候维玛

编辑:

在得出我ipAddress缺少网络接口的结论后,我将其更改ipAddress"fe80::xxxx:xxxx:xxxx:xxxx%2"(是的 2 是正确的,我用 ping6 进行了测试)。

这似乎有点“更多”,因为异常变为:

System.ArgumentException: host
at Renci.SshNet.ConnectionInfo..ctor (System.String host, Int32 port, System.String username, ProxyTypes proxyType, System.String proxyHost, Int32 proxyPort, System.String proxyUsername, System.String proxyPassword, Renci.SshNet.AuthenticationMethod[] authenticationMethods) [0x00000] in <filename unknown>:0 
at Renci.SshNet.PasswordConnectionInfo..ctor (System.String host, Int32 port, System.String username, System.Byte[] password, ProxyTypes proxyType, System.String proxyHost, Int32 proxyPort, System.String proxyUsername, System.String proxyPassword) [0x00000] in <filename unknown>:0 
at Renci.SshNet.PasswordConnectionInfo..ctor (System.String host, Int32 port, System.String username, System.String password) [0x00000] in <filename unknown>:0 
at Renci.SshNet.SshClient..ctor (System.String host, Int32 port, System.String username, System.String password) [0x00000] in <filename unknown>:0 
at Renci.SshNet.SshClient..ctor (System.String host, System.String username, System.String password) [0x00000] in <filename unknown>:0 
at main program...

解决了

使用 SSH.NET 的预发布包解决了我的问题!

感谢@MartinPrikryl 和其他人;)

4

1 回答 1

2

如果您连接到链接本地地址 (FE80::),那么您需要使用 % 指定接口名称,例如 FE80::%eth0

因为你可以有多个链接本地地址,你需要告诉你的操作系统使用哪个接口。对于单播地址,操作系统通过路由表知道要使用哪个接口。

于 2015-07-28T16:55:48.610 回答