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的原理图。

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"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值