• .Net 在容器中操作宿主机


    方案描述

    在 docker 容器中想操作宿主机,一般会使用 ssh 的方式,然后 .Net 通过执行远程 ssh 指令来操作宿主机。本文将使用 交互式 .Net 容器版 中提供的镜像演示 .Net 在容器中如何操作宿主机。

     

    前期准备

    1. 在宿主机上生成 ssh key

    ssh-keygen -t rsa -b 4096

     

    2. 把 Public Key 加入到 authorized_keys

    cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys

     

    3. 启动容器,并把 Private Key 挂载到容器中

    docker run --name dotnet-interactive -d -v /root/.ssh/id_rsa:/root/.ssh/id_rsa -p 80:8888 dotnet-interactive:1.0.0
    
    docker ps

     

    4. 安装 ssh client

    打开网页并进入 Terminal:

     

    安装 ssh client:

    # 更新源
    apt-get update -y
    
    # 安装 ssh client
    apt-get install openssh-client -y

     

    # 检查 ssh client 安装情况
    ssh --help

     

    操作演示

    1. 指令获取容器主机名

    hostname

     

    2. 指令获取宿主机主机名

    ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PasswordAuthentication=no -i /root/.ssh/id_rsa {user}@{nodeIp} "hostname"

     

    3. .Net 获取容器主机名

    复制代码
    using System.Diagnostics;
    
    public string ExecuteCommand(string command)
    {
        var escapedArgs = command.Replace("\"", "\\\"");
        var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{escapedArgs}\"",
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true
            }
        };
    
        process.Start();
        process.WaitForExit();
    
        var message = process.StandardOutput.ReadToEnd();
        message += process.StandardOutput.ReadToEnd();
    
        return message;
    }
    
    var hostname = ExecuteCommand("hostname");
    hostname
    复制代码

     

    4. .Net 获取宿主机主机名

    复制代码
    public string ExecuteCommandSSH(string ip, string rootUser, string command)
    {
        var script = $"ssh -q -o \"StrictHostKeyChecking no\" -o \"UserKnownHostsFile=/dev/null\" -i /keys/{ip}/sshkey/id_rsa \"{rootUser}@{ip}\" \"{command}\"";
        return ExecuteCommand(script);
    }
    
    var hostname2 = ExecuteCommandSSH("10.0.0.2", "root", "hostname");
    hostname2
    复制代码

     

    参考总结

    以上就是本文希望分享的内容,如果大家有什么问题,欢迎在文章或者公众号 - 跬步之巅留言交流。
  • 相关阅读:
    分布式事务Seata源码解析九:分支事务如何注册到全局事务
    看服装数字化工厂是如何运作的
    Python学习小组课程P4-Python办公(1)Excel保存
    【linux驱动开发】-gpiolib概念与实践
    中手游上半年扭亏为盈,仙剑IP魅力不减?
    坪山区关于开展2022年度科技创新专项资金申报工作的通知
    2022哪个牌子的台灯质量好?双十一值得入手的好用护眼台灯推荐
    ADB基本用法
    实际电容的频率特性
    vue源码分析-事件机制
  • 原文地址:https://www.cnblogs.com/Erik_Xu/p/16279735.html