SSHPASS 源码分析
简介
sshpass是一款自动为ssh填充密码的开源插件,并没有对ssh做任何修改,是从外部进行的操作。sshpass实现比较简单,但是非常易用,原理与expect类似。sshpass主函数源码只有500来行,在https://sourceforge.net/projects/sshpass/ 可以下载。
密码填充方式
sshpass密码填充方式有三种,通过-p后边的参数将密码传送过去,读取文件第一行作为密码传过去,或者通过-e将名字为SSHPASS的环境变量作为密码传过去。
void write_pass( int fd )
{switch( args.pwtype ) {case PWT_STDIN: // 密码来自标准输入write_pass_fd( STDIN_FILENO, fd );break;case PWT_FD: // 密码来自文件描述符write_pass_fd( args.pwsrc.fd, fd );break;case PWT_FILE: //密码来自文件{int srcfd=open( args.pwsrc.filename, O_RDONLY );if( srcfd!=-1 ) {write_pass_fd( srcfd, fd );close( srcfd );}}break;case PWT_PASS: //密码来自变量,使用-p或者SSHPAS环境变量write( fd, args.pwsrc.password, strlen( args.pwsrc.password ) );write( fd, "\n", 1 );break;}
}
密码填充原理
这里大概画了一张sshpass的原理图。
当main函数开始执行,主进程执行`masterpt=posix_openpt(O_RDWR);`此时会有一个伪终端,然后fork()出一个子进程,在子进程下执行ssh命令,当收到带有*assword关键词的输出时候讲密码填充进去。
sshpass 使用方式
sshpass 命令放在ssh命令之前,sshpass 与ssh分别将自己的命令参数放到自己后面。
sshpass "command params" ssh root@127.0.0.1 "ssh's command params"
SSHPASS 源码分析相关推荐
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...
- SpringBoot-web开发(二): 页面和图标定制(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...
- SpringBoot-web开发(一): 静态资源的导入(源码分析)
目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...
- Yolov3Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...
- ViewGroup的Touch事件分发(源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...
- View的Touch事件分发(二.源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
- [转]slf4j + log4j原理实现及源码分析
slf4j + log4j原理实现及源码分析 转载于:https://www.cnblogs.com/jasonzeng888/p/6051080.html
最新文章
- Go语言fmt.Printf使用指南(占位符总结)
- 02 | 日志系统:一条 SQL 更新语句是如何执行的
- JavaScript实现使用二元运算符将两个数字相加fullAdder算法(附完整源码)
- linux c的连接库和怎么同时编译多个源程序
- 机器学习之EM算法的原理推导及相关知识总结
- 计算机科学与技术pdf,计算机科学与技术(.PDF
- 区分大小屏幕_第一个Python程序——在屏幕上输出文本
- 搜狗高速浏览器打开网页没有声音怎么办
- lisp代码编写地物符号_Aroma:通过结构代码搜索推荐代码
- Extjs数据展现原理
- 后悔药来了?发出去的微信图文消息删除后不再显示
- Unicode 字符编码
- 5000的台式计算机,预算5000的台式组装机配置清单_预算5000的台式组装机配置
- 【解决】计算机用户名是中文名导致软件安装失败!
- 软件质量的定义及其六大特性(质量模型)
- 数字营销中台和全渠道的数字化精耕,快消老品牌实现数字营销焕新生
- python调用报表制作工具_Python如何使用xlwt制作一个表格
- 基于java+ssm+mysql的大学生考勤管理系统及智能分析系统
- UE4-(场景)后期盒子(PostProcessVolume)之Exposure自动曝光
- ISO20000和ITSS认证有什么区别