我能够:
ssh -p 8811 myuser@74.xxx.xxx.xxx
然后,在该机器内部,可以运行一个程序,成功地在端口32060的10.xx.xxx.xxx上建立套接字连接。
我正在尝试将它转换为一个本地C#程序,该程序可以执行ssh +套接字连接,而不必在我的终端上打开ssh,所以我只需运行该程序。
它能够成功地插入ssh,然后ping 10.xx.xxx.xxx地址,但不能建立套接字连接。我是不是错过了一步?
using (var client = new SshClient("74.xxx.xxx.xxx", 8811, "myuser", privatekey))
{
client.Connect();
string host = "10.xx.xxx.xxx";
int port = 32060;
if (client.IsConnected)
{
Console.WriteLine("ssh connected");
SshCommand cmd = client.CreateCommand($"ping -c 3 {host}");
cmd.Execute();
Console.WriteLine(cmd.Result); // successfully pings 10.xx.xxx.xxx
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(new IPEndPoint(IPAddress.Parse(host), port));
Console.WriteLine("tcp connected"); // fails, times out when trying 10.xx.xxx.xxx:32060
}
client.Disconnect();
}
发布于 2022-06-07 18:42:38
我能够使用一个名为Chilkat socket.UseSsh()
:https://www.chilkatsoft.com/refdoc/csSocketRef.html#method91的包来工作。
string sshUsername = "myuser";
string sshHostname = "74.xxx.xxx.xxx";
int sshPort = 8811;
string socketHostname = "10.xx.xxx.xxx";
int socketPort = 32060;
// === SSH ===
Chilkat.Ssh ssh = new Chilkat.Ssh();
Chilkat.SshKey sshkey = new Chilkat.SshKey();
sshkey.FromOpenSshPrivateKey(@"xxx");
bool success = ssh.Connect(sshHostname, sshPort);
if (success != true)
{
Console.WriteLine(ssh.LastErrorText);
return;
}
success = ssh.AuthenticatePk(sshUsername, sshkey);
if (success != true)
{
Console.WriteLine(ssh.LastErrorText);
return;
}
// === Socket ===
Chilkat.Socket socket = new Chilkat.Socket();
success = socket.UseSsh(ssh);
if (success != true)
{
Console.WriteLine(socket.LastErrorText);
return;
}
bool useTls = false;
int maxWaitMillisec = 20000;
success = socket.Connect(socketHostname, socketPort, useTls, maxWaitMillisec);
if (success != true)
{
Console.WriteLine(socket.LastErrorText);
return;
}
https://stackoverflow.com/questions/72523864
复制相似问题