.Net 在容器中操作宿主机

1

方案描述       

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

2

前期准备       

1. 宿主机上生成 ssh key

生成 ssh key:

ssh-keygen -t rsa -b 4096

9d4025d1530b89078c6eb392686b78f4.png

把 public key 加入到 authorized_keys:

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

a29969b899f1cd7f125950a26e19fc95.png

2. 启动容器

启动容器,并把 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

511e82c2fbbc5cb620ea2a6bf9c51680.png

3. 安装 ssh client

打开网页并进入 Terminal:

241f26e0b6aa03cec8a2e58af6c05f76.png

安装 ssh client:

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

3c3d9310c4eb267d3f98d830dac840cd.png

检查 ssh client 安装情况:

ssh --help

7f380c79b9e455070473fb4af1ddabe9.png

3

操作演示       

1. 指令获取容器主机名

hostname

27abf5819025417f687b031fab0c61a2.png

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

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

dc27bbc39e744093ae70bf4a0f6d4287.png

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

6a029948e26dca8f7312cb42e0db0959.png

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

a042b2bb3c9dd2c2e53476c071e215c0.png

4

参考总结       

以上就是本文希望分享的内容,如果大家有什么问题,欢迎在公众号 - 跬步之巅留言交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【看动漫学编程】程序员在异世界生个娃 第1篇:太极村

前言 作者文笔比较水,还请见谅。 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接。 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解。 由于没有经费支持,所以画出来的东西是我自己用代码…

【ArcGIS风暴】最牛逼空间数据批处理神器来了:用户自定义工具箱GeoStorm.tbx

【Warming up】在学习和工作的过程中,作者曾写过很多采用ArcGIS模型构建器(Model Builder)、Python代码等批处理方法(感兴趣的GISers可以去【测绘地理信息Big风暴专】栏去交流学习指导),大大的减轻了操作压力,提高了工作效率。今天给大家展示一款神器:自定义工具箱GeoS…

2.6. PostgreSQL表之间连接

到目前为止,我们的查询一次只访问了一个表。查询可以一次访问多个表,或者用某种方式访问一个表,而同时处理该表的多个行。一个同时访问同一个或者不同表的多个行的查询叫连接查询。举例来说,比如你想列出所有天气记录以及这些记录…

Android之Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains

1 问题 用takePhoto去照相的时候特么的一打开就报这个错误 2020-04-09 21:33:49.124 19016-19016/com.appsinnova.android.keepshare E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.appsinnova.android.keepshare, PID: 19016java.lang.RuntimeException: Unable to …

Linux下c/c++项目代码覆盖率的产生方法

最近做了一系列的单元测试相关的工作,除了各种规范及测试框架以外,讨论比较多的就是关于代码覆盖率的产生,c/c与其他的一些高级语言或者脚本语言相比较而言,例如 Java、.Net和php/python/perl/shell等,由于没有这些高级…

C# WPF从后台代码生成行列可变的表格

z概述WPF常用的表格控件是DataGrid,这个控件在前台XAML编写的话,一般列已经固定,然后给每个列去绑定数据,但是如果我的列不固定,随着运算结果变动呢?这时候DataGrid,就比较难实现这个需求&#…

软件架构实践文章链接

2019独角兽企业重金招聘Python工程师标准>>> 架构 InfoQ: 又拍网架构中的分库设计 SNS网站数据库技术分析 - 51CTO.COM 数据库水平切分的实现原理解析 - iBATIS - Java - JavaEye论坛 基于amoeba的mysql分布式数据库学习(一) - Java - JavaEy…

【看动漫学编程】程序员在异世界生个娃 第2篇:外挂已准备就绪

前言 作者文笔比较水,还请见谅。 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接。 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解。 由于没有经费支持,所以画出来的东西是我自己用代码…

java剪切txt文件_用Java把剪切板的内容实时保存到txt

test类:提示用户程序已启动,提示保存位置,清空剪切板。package com.ariya.service;import com.ariya.service.impl.ClipboardServiceImpl;/*** author Ariya* 程序入口*/public class Test {public static void main(String[] args) {Clipboa…

【三维激光扫描】第一章:三维激光扫描入门基础知识

随着地理空间信息服务产业的快速发展,地理空间数据的要求越来越高。对地理空间数据的要求正朝着大信息量、高精度、可视化和可挖掘方向发展。地面激光雷达技术是一门新兴的测绘技术,已逐渐成为广大科研和工程技术人员全新的解决问题的手段。地面三维激光扫描技术与全站仪测量…

Android之kotlin里面本地图片BitmapFactory.decodeFile转bitmap失败问题

1 问题 我们手机本地有个图片文件比如如下 /storage/emulated/0/Android/data/package_name/cache/1586444511539.png 我们需要png转bitmap,然后设置到ImageView里面显示 var bitmap BitmapFactory.decodeFile(imagePath);if (bitmap null) returnelse mImagevi…

3、面向对象-继承-多态

1、继承子类可以继承父类的一切,一个子类只能有一个父类,一个父类可以有多个子类//父类class Ren{public $name;public $sex;public $yuyan;function Say() {echo $this->name."正在讲话!";}}//美国人的子类class America ex…

整理iOS9适配中出现的坑

一、NSAppTransportSecurity iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输。直接造成的情况就是App发请求的时候弹出网络无法连接。解决办法就是在项目的info.plist 文件里加上如下节点: NSAppTransportSecurity - NSAl…

由c# dynamic是否装箱引发的思考

前言前几天在技术群里看到有同学在讨论关于dynamic是否会存在装箱拆箱的问题,我当时第一想法是"会"。至于为啥会有很多人有这种疑问,主要是因为觉得dynamic可能是因为有点特殊,因为它被称为动态类型,可能是因为这里的动态对大家造成的误解,认为…

【看动漫学编程】程序员在异世界生个娃 第3篇:搞不好我就是个王者

前言 作者文笔比较水,还请见谅。 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接。 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解。 由于没有经费支持,所以画出来的东西是我自己用代码…

PHP会话控制考察点

为什么要使用会话控制技术 HTTP协议是无状态的,也就是说HTTP没有一个内建的机制来维护两个事务之间的状态。当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户。而用户登录、购物车等,这些是需要服务器…

数据库SQL语句学习笔记(6)-使用函数处理数据

1.SQL也可以用函数来处理数据,函数一般是在数据上执行的,为数据的转换和处理提供了方便。但是每一个数据库管理系统(DBMS)都有特定的函数,事实上,只有少数几个函数被所有的DBMS等同地支持。例如&#xff0c…

java3n 1_1005 继续(3n+1)猜想(JAVA)

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n3 进行验证的时候,我们需要计算 3、5、8、4、2、1&…

【遥感物候】Matlab求解一元六次多项式,计算植被生长季始期

一元六次多项式能很好的逼近滤波后的曲线,与二次多项式相比,在拟合植被整个生长季曲线方面有更好的优势,该方法常用来描述北方温带和高纬度地区时序NDVI生长季模式。因此,本文使用一元六次多项式来拟合植被整个生长季曲线,效果很好。那么拟合后,这样解方程呢求生长季参数…

Android之给控件添加水纹波效果

1 问题 给控件添加水纹波效果,点击起来像点中了,不然效果太粗糙了,没反应。 2 实现 给控件添加如下属性 android:background"?android:attr/selectableItemBackground"波纹有边界 android:background"?android:attr/sele…