当前位置: 首页 > news >正文

镇江公司做网站wordpress主题pjax

镇江公司做网站,wordpress主题pjax,wordpress售后主题,手机网站微信登录文章目录 ssh原理使用golang远程下发命令使用golang远程传输文件 ssh原理 说到ssh原理个人觉得解释最全的一张图是这张华为画的 Connection establishment 这一步就是建立tcp连接 version negotiation 这一步是ssh客户端(连接者)和被ssh服务端(连接者)进行协议的交换#xf… 文章目录 ssh原理使用golang远程下发命令使用golang远程传输文件 ssh原理 说到ssh原理个人觉得解释最全的一张图是这张华为画的 Connection establishment 这一步就是建立tcp连接 version negotiation 这一步是ssh客户端(连接者)和被ssh服务端(连接者)进行协议的交换比如ssh客户端支持那些加密协议协商出最后使用的协议还有就是协商ssh版本 Key Exchange 在说Key Exchange之前我们要知道主机有2类的ssh-key分别是hostkey和user ssh key每类key都分公钥和私钥公钥可以加密私钥可以解密 hostkey user ssh key 首先hostkey当ssh server安装的时候这个hostkey就会默认生成在第一次连接对端的时候会显示的提醒我们叫我们确认时候继续连接如下 The authenticity of host 192.168.152.132 (192.168.152.132) cant be established. ECDSA key fingerprint is SHA256:MzAmIqRcIEb0AS6XMcAH5gtxnB779KpHRa1vOvAMs. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 这是啥意思呢我们第一次连接ssh服务端服务段会发送自己的hostkey的hash后的值给我们我们如果选择yes这段hash后的ssh服务端的hostkey被存入本地的.ssh/know_hosts中这是为了防止中间人攻击有了这个hostkey之后会使用diffie-hellman这个算法用于为2端同时生成session key因为diffie-hellman算法的特新session key必定相等后续session建立后都会用这个session key进行加密传输 Key Authentication 随后是user ssh key这个东西是用户用ssh-keygen生成的(也是ssh -i指定的identity_file])当用户使用key认证而非密码认证的时候这个就非常重要ssh客户端将自己的public user ssh key发送给服务端(因为是session用session可以进行加密)然后每当ssh客户端登录到服务端都会自己生成一个随机数用user 自己的userprivate key进行加密通过session传递给客户端服务端再用接收客户端的公钥进行解密再发送回客户端客户端进行check是自己刚刚生成的key就发送验证成功的消息给服务端最后验证通过每当客户端向服务端进行数据传输都会使用之前的session key进行加密服务段接收后用相同的session key进行解密 使用golang远程下发命令 package mainimport (fmtlogosgolang.org/x/crypto/sshgolang.org/x/crypto/ssh/knownhosts//golang.org/x/cryto/ssh )func main() {//用于对方返回的keyhostkey, err : knownhosts.New(/root/.ssh/known_hosts)if err ! nil {log.Fatal(get knowhosts file error: %s, err.Error())}identify_file : /root/.ssh/ansibleaddr : 192.168.152.132:22key, err : os.ReadFile(identify_file)if err ! nil {log.Fatal(error,Can not Read file identify_file : err.Error())}//将私钥用PEM方式加密返回成签名signer, err : ssh.ParsePrivateKey(key)if err ! nil {log.Fatal(unbale to parseprivatekey: , err)}//设置连接peer时候的configconfig : ssh.ClientConfig{User: root,Auth: []ssh.AuthMethod{ssh.PublicKeys(signer),},HostKeyCallback: hostkey,}//连接(key exchange,这里exhcange的是host key用于认证session而user key也就是自己手动生成的key用于验证用户)client, err : ssh.Dial(tcp, addr, config)if err ! nil {log.Fatal(unable to connect: err.Error())}defer client.Close()session, err : client.NewSession()if err ! nil {log.Fatal(new session error: %s, err.Error())}result, _ : session.Output(ip a)if err ! nil {fmt.Fprintf(os.Stderr, faile to run command, err:%s, err.Error())}fmt.Println(string(result))} 代码非常简单注意我们如果是第一次连接那么上述代码会执行失败因为第一次连接ssh server要返回自己的hostkey给客户端(我们执行代码的机器)客户端要在自己的know_host里面check但是第一次连接know_host没有数据就会失败所以可以将代码改成不安全的模式也就是不check know_host方法也很简单就是将连接时候的config的HostKeyCallback对应的值改为ssh.InsecureIgnoreHostKey()如下 package mainimport (fmtlogosgolang.org/x/crypto/ssh//golang.org/x/crypto/ssh/knownhosts//golang.org/x/cryto/ssh )func main() {//用于对方返回的key//hostkey, err : knownhosts.New(/root/.ssh/known_hosts)//if err ! nil {// log.Fatal(get knowhosts file error: %s, err.Error())//}identify_file : /root/.ssh/ansibleaddr : 192.168.152.132:22key, err : os.ReadFile(identify_file)if err ! nil {log.Fatal(error,Can not Read file identify_file : err.Error())}//将私钥用PEM方式加密返回成签名signer, err : ssh.ParsePrivateKey(key)if err ! nil {log.Fatal(unbale to parseprivatekey: , err)}//设置连接peer时候的configconfig : ssh.ClientConfig{User: root,Auth: []ssh.AuthMethod{ssh.PublicKeys(signer),},HostKeyCallback: ssh.InsecureIgnoreHostKey(),}//连接(key exchange,这里exhcange的是host key用于认证session而user key也就是自己手动生成的key用于验证用户)client, err : ssh.Dial(tcp, addr, config)if err ! nil {log.Fatal(unable to connect: err.Error())}defer client.Close()session, err : client.NewSession()if err ! nil {log.Fatal(new session error: %s, err.Error())}result, _ : session.Output(ip a)if err ! nil {fmt.Fprintf(os.Stderr, faile to run command, err:%s, err.Error())}fmt.Println(string(result))} 最后打印出结果 rootmaster:~/demo/ssh# ./ssh 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever 2: ens32: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:7e:76:1b brd ff:ff:ff:ff:ff:ffaltname enp2s0inet 192.168.152.132/24 brd 192.168.152.255 scope global noprefixroute ens32valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe7e:761b/64 scope linkvalid_lft forever preferred_lft forever使用golang远程传输文件 在代码之前我们要了解2个小的知识点 scp -t的用途文件形式 首先scp -t这个选项不管是man还是其他的公开官方资料中都很难找到其身影我们先运行看是在干嘛 rootslaver1:/test# scp -t . 输入后就卡着不动因为这个时候scp的程序在等待远端的scp程序通过tcp的22号端口向他发送文件… 所以scp -t是通过端口接收文件用的 在说一个文件的格式一个文件开头第一行标记了文件的信息比如权限比如大小比如文件名后面的才是内容最后以\x000结尾所以我们传递的时候最好使用管道先传递文件原信息再传递文件的内容最后传递\x000表示结尾直接看代码 package main import (bytesfmtiologossyncgolang.org/x/crypto/ssh )func main(){identify_file : /root/.ssh/ansibleaddr : 192.168.152.132:22key, _ : os.ReadFile(identify_file)signer, _ : ssh.ParsePrivateKey(key) //用协商出来的动态session key进行加密config : ssh.ClientConfig{User: root,Auth: []ssh.AuthMethod{ssh.PublicKeys(signer),},HostKeyCallback: ssh.InsecureIgnoreHostKey(),}client, _ : ssh.Dial(tcp, addr, config)defer client.Close()session, _ : client.NewSession()defer session.Close()file, _ : os.Open(apply.sh)defer file.Close()stat, _ : file.Stat()wg : sync.WaitGroup{}wg.Add(1)go func() {hostIn, _ : session.StdinPipe()defer hostIn.Close()fmt.Fprintf(hostIn, C0655 %d %s\n, stat.Size(), apply.sh)//第一行输入文件元数据io.Copy(hostIn, file) //copy 文件内容fmt.Fprint(hostIn, \x000) //表示结束wg.Done()}()session.Run(/usr/bin/scp -t /test)wg.Wait()}
http://www.pierceye.com/news/481956/

相关文章:

  • 网站跟域名是什么关系城乡建设部网站 挂证
  • 做理财网站赣州哪里可以做网站
  • 网站收益长寿做网站的电话
  • 网站推广的方式和管理方法公司注册核名
  • 帮人做钓鱼网站以及维护东莞住建局官网网站
  • 如何在百度里做推广网站个人怎样注册一家公司
  • 上海移动端网站建设西安专业做网站公司
  • 水果网站建设的策划书wordpress会员邮件通知
  • 合肥在线网站百色建设局网站
  • 梅河口市建设局网站华为网站搭建
  • gta5卖公司显示网站正在建设中公司网站制作有哪些
  • 免费推广网站大全下载c 视频播放网站开发
  • 做外贸网站维护费是多少做瞹瞹嗳视频网站
  • 国外好的网站空间台州论坛
  • 网络网站推广优化wordpress 文章 样式
  • 建设电影网站视频做暧视频网站大全
  • 深圳市建设银行网站国内产品网站
  • 东莞网站建设管理sem网络推广公司
  • seo建站平台哪家好做qq空间网站
  • 网站制作性价比哪家好中国最大的家装网站
  • 网站域名被注册公司运营管理方案
  • 网站建设评语商城微发布官网
  • 仿同程网 连锁酒店 网站模板系统模板html
  • 推广网app下载seo课程
  • 有效方法的小企业网站建设域名怎么拿来做网站
  • 网站版面如何布局做一个企业的网站怎么做的
  • 天门市城市建设管理局网站大连专业网页设计
  • 百度网站收录提交入口全攻略网站支付体现功能怎么做
  • 网站更改文章标题主流跨境电商平台有哪些
  • vue做直播网站上海最繁华的五个区