首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SSH进入机器,然后连接TCP套接字。

SSH进入机器,然后连接TCP套接字。
EN

Stack Overflow用户
提问于 2022-06-06 13:59:32
回答 1查看 206关注 0票数 -1

我能够:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh -p 8811 myuser@74.xxx.xxx.xxx

然后,在该机器内部,可以运行一个程序,成功地在端口32060的10.xx.xxx.xxx上建立套接字连接。

我正在尝试将它转换为一个本地C#程序,该程序可以执行ssh +套接字连接,而不必在我的终端上打开ssh,所以我只需运行该程序。

它能够成功地插入ssh,然后ping 10.xx.xxx.xxx地址,但不能建立套接字连接。我是不是错过了一步?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-07 18:42:38

我能够使用一个名为Chilkat socket.UseSsh()https://www.chilkatsoft.com/refdoc/csSocketRef.html#method91的包来工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72523864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文