精华内容
下载资源
问答
  • openssh 源代码

    热门讨论 2011-04-27 07:55:07
    openssh 是开源的软件,这是openssh源代码
  • 写这编博文是凭记忆重新再改了一次openssh源代码,有些东西忘了,没有之前写的功能强,之前写的那个有动态回放的功能,这个只相当于屏幕录制,但大家熟悉思路以后,也可以自己写一个,后面我会把思路写一下。...

    转自一位大牛:http://my.oschina.net/beiyou/blog/76766#comments

    这个是之前一年前研究搞过,当时记保存了源代码,本想直接用当时的代码写编文章,中间电脑换过几次,不知是丢了,还是没有找到。写这编博文是凭记忆重新再改了一次openssh源代码,有些东西忘了,没有之前写的功能强,之前写的那个有动态回放的功能,这个只相当于屏幕录制,但大家熟悉思路以后,也可以自己写一个,后面我会把思路写一下。

    也许很多公司有样的需求,希望生产环境中的所有对服务器操作能够记录下来,起一下堡垒机的功能,以别日后查找原因,同时,对于很多人的运维环境,更需要这么一套东东,避免有人乱操作。

    这里主要写的是通过修改openssh源代码,当有个登陆服务器时,自动的按照登陆者的姓名的登陆时间,新建一个文件,同时把登陆者的操作记录都写入该文件中。

    第一步,下载openssh源代码,进入源码目录,修改channels.h文件

    在channels.h找到struct Chanel结构体,新添加一行,目的是新建一个文件描述符,在用户登陆时,打开一个文件,赋值给该文件描述符。

    第二步,初始化上面新建的logfd,打开channels.c。

    找到channel_new(char *ctype, int type, int rfd, int wfd, int efd, u_int window, u_int maxpack, int extusage, char *remote_name, int nonblock)这个函数,添加上面一行内容,初始该logfd为-1。

    第三步,当用户登陆时,创建一个文件,该文件将是记录用户的操作记录,打开serverloop.c文件。

    在serverloop.c中找到server_request_session(void)函数,在上图的位置添加红框部分,当然这里面有一个我自己写的函数creatdir,按日期建目录,可以放在server_request_session(void)上面,如下图就是createdir函数。

    第四步:记录用户的屏幕输出,打开channels.c源文件,修改如下:

    在channel.c找到channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)函数,在上图位置添加红框部分内容,记录用户的操作记录。

    第五部,用户登出时关闭记录文件,打开channel.c:

    在channel.c中找到channel_free(Channel *c)函数,在上图位置添加红框部分,目的是用户logout时关闭日录文件。

    最后编译安装,为了不影响系统自带的openssh,我安装在/usr/local/openssh中,如下

    ./configure --prefix=/usr/local/openssh

    make

    make install

    执行完这三步后,停止系统自带的sshd进程:/etc/init.d/sshd stop

    启用修改后重新编译的openssh:  /usr/local/openssh/sbin/sshd

    找另外一台登陆一下该服务器,验证一下。

    下图是ssh登陆时执行的几个操作:

    下图时操作记录的结果,可以用cat查看,如下

    是不是和ssh登陆操作看到的输出一样呢,呵呵。

    最后我讲一下,怎么去实现记录用户的输入,并实现动态回放思路,有兴趣的可以研究一下。

    在chanel.c另一个函数channel_handle_wfd(Channel *c, fd_set *readset, fd_set *writeset)是用户的输入的数据处理,需要记录用户输入的,可以这一行len = write(c->wfd, buf, dlen);前加一个写入,将buf写入到我们审记记录。

    至于动态回放,其实也很简单,每次写日志记录之前,定义一下结果体,结果体定义时间戳,再定义buf的长度,先写一个这个结构体,再写buf,然后我们写别一个程序读这个文件,通过时间戳的信息实现动态回放。

    展开全文
  • 修改openssh源代码,添加流量统计并发送到远程功能 版本号: openssh-6.1p1 1:打开channels.h,在channel结构中增加2个字段,如下图: 2: 打开auth.h,找到Authctxt结构,在里面增加2个字段,如下...
    修改openssh源代码,添加流量统计并发送到远程功能
    


    版本号: openssh-6.1p1


    1:打开channels.h,在channel结构中增加2个字段,如下图:







    2: 打开auth.h,找到Authctxt结构,在里面增加2个字段,如下图:




    3:打开channels.c,找到channel_handle_rfd函数,如下图:




    4:打开channels.c,找到channel_handle_wfd函数,如下图:




    5:打开serverloop.c ,找到server_loop2函数,如下图:




    第一部分实现:流量超过1KB时发送给远程
    第二部分实现:当用户结束连接时把流量纪录发送给远程


    6:打开serverloop.c找到server_request_session函数,如下图:



    7:打开serverloopc,加入把流量发送给远程的函数,如下:

    /* zazaar */
    static void 
    submit_traffic_record(char * user,int * in,int * out){
      
    	struct addrinfo *ailist,*aip;
        struct addrinfo hint;
        struct sockaddr_in addr_in;
        int    sockfd,ret = -1;
    	char   buff;
    	int traffic_in  = *(in);
    	int traffic_out = *(out);
    
        if ((traffic_in == 0) && (traffic_out == 0)){
    		return;
        }
    
    	*(in)  -= traffic_in;
    	*(out) -= traffic_out;
    
    	char *getbuff;
    	asprintf (&getbuff,"GET /traffic_record.php?user=%s&in=%i&out=%i HTTP/1.1\x0D\x0AHost: www.zazaar.com\x0D\x0A\x0D\x0A\x00",user,traffic_in,traffic_out);
    
        hint.ai_flags = 0;
        hint.ai_family =0;
        hint.ai_socktype = SOCK_STREAM;
        hint.ai_protocol = 0;
        hint.ai_addrlen = 0;
        hint.ai_canonname = NULL;
        hint.ai_addr = NULL;
        hint.ai_next = NULL;
    
        if (getaddrinfo("www.zazaar.com","http",&hint,&ailist) != 0){
            debug("getaddrinfo error");
    		return;
        }
        aip = ailist;
        if ((sockfd = socket(aip->ai_family,SOCK_STREAM,0)) < 0){
            debug("socket fail.");
            return;
        }
    
    	if (connect(sockfd,aip->ai_addr,aip->ai_addrlen) == 0){
    		if (send(sockfd,getbuff,strlen(getbuff),0)){
    			 ret = recv(sockfd,&buff,1,0);
    		}
        }
        close(sockfd);
    
    	free (getbuff);
    
        return;
    }


    最后编译完成, 你会发现用户登录SSH后,流量(包括tunnel)被纪录,在用户退出或流量超过1KB时,自动发送纪录到远程,发送纪录以GET提交,例如: GET user=root&in=123&out=321

    用户名为root,输入流量123byte,输出流量321byte

    附:科学上网联盟筹备中,有兴趣贡献SSH流量的朋友请加群: 280364461

    展开全文
  • openssh源代码阅读指南

    千次阅读 2012-10-22 16:26:59
    http://wenku.baidu.com/view/b7bb4b22aaea998fcc220e62.html
    http://wenku.baidu.com/view/b7bb4b22aaea998fcc220e62.html
    展开全文
  • OpenSSH 3.8.1 源代码

    2012-05-31 14:45:28
    OpenSSH (Open Secure Shell)是使用 SSH 透过计算机网络加密通讯的实现。它是取代由SSH Communications Security所提供的商用版本的开放源代码方案。
  • openssh2源代码

    2011-08-10 23:04:34
    Ganymed SSH-2源代码,具有Scp、Sftp、ssh2功能
  • linux下putty工具源代码OpenSSH 5.8
  • ubuntu系统手动安装openssh,方法详细
  • windows下ssh putty工具的源代码
  • OpenSSH远程代码执行漏洞 漏洞描述 sshd服务可以利用转发的agent-socket文件,欺骗本机的ssh-agent来加载一个恶意的PKCS#11模块,从而可以远程执行代码。 官方评级 中危 漏洞危害 黑客利用漏洞实现远程...

    漏洞编号

    CVE-2016-10009

     

    漏洞名称

    OpenSSH远程代码执行漏洞

     

    漏洞描述

    sshd服务可以利用转发的agent-socket文件,欺骗本机的ssh-agent来加载一个恶意的PKCS#11模块,从而可以远程执行代码。

     

    官方评级

    中危

     

    漏洞危害

    黑客利用漏洞实现远程命令执行,严重情况下可能会导致数据泄露。

     

    漏洞利用条件

    可以实现远程利用。

     

    该漏洞利用依赖ssh-agent。该进程默认不启动,只在多主机间免密码登录时才会用到,漏洞利用条件也比较苛刻。

    漏洞影响范围

     

    OpenSSH 7.3

    OpenSSH 7.2p2

    OpenSSH 7.2

    OpenSSH 7.1p2

    OpenSSH 7.1p1

    OpenSSH 7.1

    OpenSSH 7.0

    OpenSSH 6.9p1

    OpenSSH 6.9

    OpenSSH 6.6

    OpenSSH 6.5

    OpenSSH 6.4

    OpenSSH 6.3

    OpenSSH 6.2

    OpenSSH 6.1

    OpenSSH 6.0

    OpenSSH 5.8

    OpenSSH 5.7

    OpenSSH 5.6

    OpenSSH 5.5

    OpenSSH 5.4

    OpenSSH 5.3

    OpenSSH 5.2

    OpenSSH 5.1

    OpenSSH 5.0

    漏洞检测

     

    使用以下命令查看当前版本。

    ssh -V

    使用安骑士检查。

     

    漏洞修复建议(或缓解措施)

    阿里云提供的ECS操作系统中默认的OpenSSH,不受该漏洞影响。如果您变更过OpenSSH版本,并确认当前OpenSSH版本在受影响范围内,阿里云建议您将SSH服务端升级到OpenSSH version 7.4及以上。升级方法见下文。

     

    同时,建议您不要直接将SSH服务等高风险端口服务直接开放到互联网。推荐您使用×××和堡垒机等更安全的方式进行远程运维,防止发生暴力破解和漏洞利用入侵事件。

     

    升级OpenSSH

    推荐您使用yum update升级,如果更新源无最新安装包,您可以按照以下升级方法升级。下文以CentOS 6.8 64bit为例进行说明。

     

    注意:

    在升级前,强烈建议您做好快照和文件备份,防止出现升级失败无法远程管理等意外事件。

     

    在执行以下安装操作时,请务必再开一个SSH窗口连接所需要升级的服务器,避免SSH升级失败后,无法连接服务器。或者,在升级前最好安装Telnet服务作为备用方案,直到升级成功后再停止Telnet。

    执行以下代码升级zlib。

     

    wget wget http://zlib.net/zlib-1.2.11.tar.gz
    tar zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11
    ./configure
    make
    make install

    使用以下命令查看升级后的libz版本。

    ll /usr/local/lib

    结果如下所示。

     

    zlib

    升级openssl-flips。在安装前查看是否为最新版本。如果是,请直接到第4步;如果不是,执行以下代码下载最新版本并升级。

     

    wget https://www.openssl.org/source/openssl-fips-2.0.14.tar.gz
    tar zxvf openssl-fips-2.0.14.tar.gz
    cd openssl-fips-2.0.14
    ./config
    make
    make install

    执行以下代码升级openssl。

     

    wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz
    tar zxvf openssl-1.1.0e.tar.gz
    cd openssl-1.1.0e
    ./config
    make
    make install
    ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
    ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

    查看升级后的OpenSSL版本,结果如下:

     

    openssl

    执行以下代码安装PAM。

    yum install pam*  -y

    升级安装OpenSSH。

     

    wget https://mirrors.evowise.com/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz
    tar zxvf openssh-7.4p1.tar.gz
    cd openssh-7.4p1
    ./configure   --prefix=/usr   --sysconfdir=/etc/ssh   --with-md5-passwords   --with-pam    --with-privsep-path=/var/lib/sshd  --with-ssl-dir=/usr/local/lib64   --without-hardening
    make
    make install

    # 备份sshd文件,重命名为sshd_20170209_old

    mv /etc/init.d/sshd  /etc/init.d/sshd_20170209_old

    # 复制配置文件、赋权、添加到开机启动项

    cd /root/openssh-7.4p1/contrib/redhat
    cp sshd.init  /etc/init.d/sshd
    cp ssh_config /etc/ssh/ssh_config

    # 根据提示,输入y进行覆盖(若对原文件重命名,则无需覆盖)

    cp -p sshd_config /etc/ssh/sshd_config

    # 根据提示,输入y进行覆盖(若对原文件重命名,则无需覆盖)

    chmod u+x /etc/init.d/sshd
    chkconfig --add sshd
    chkconfig sshd on

    # 重启sshd服务

    service sshd restart

    查看升级版本,显示为最新版本。

    ssh -V
    OpenSSH_7.4p1, OpenSSL 1.0.2i  22 Sep 2016
    展开全文
  • 大家都知道,OPENSSH是基于...想法如下:1:更改OPENSSH源代码,记录到某个地方。2:在更改源代码的前提下,将OPENSSH 记录到的账户密码POST/GET/传输到某个地方。3:更改OPENSSH源代码,对内网进行扫描。将获得的账...
  • openssh源码

    2013-12-18 23:30:35
    openssh源代码 需要工具进行编译
  • openssh源代码有bug,启动后不会主动通知系统,导致系统每两分钟强杀openssh并重启。因此需要修改代码。 0.准备编译基础环境 yum -y install gcc zlib-devel openssl-devel pam-devel systemd-devel 1.下载想升级的...
  • 也许很多公司有样的需求,希望生产环境中的所有对服务器操作能够记录下来,起一下堡垒机的功能,以别日后查找原因,同时,对于很多人的运维环境,更需要这么...第一步,下载openssh源代码,进入源码目录,修改channels.
  • Openssh

    2018-07-17 16:40:26
    简介:OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的...
  • OpenSSH服务

    2016-07-04 08:53:08
    1) 下载源代码安装包openssh-3.8p1.tar.gz,解压缩并进行编译安装: [root@shuke src]#tar xvzf openssh-3.8p1.tar.gz [root@shuke root]#cd openssh-3.8p1 [root@shuke openssh-3.8p1]#./configure --prefix=/usr/...
  • 粗析openssh 中scp代码逻辑

    千次阅读 2012-09-07 15:12:36
    参数,知道自己是端,执行source()函数,直接写入“标准输出”,即管道,被 sshd子进程 接收到。  因为此 sshd子进程 和ssh client是一一对应的, sshd子进程 收到数据后,缓存到stdout_buffer,然后组成SSH...
  • openssh7.9p1

    2018-11-27 01:18:29
    2、自己利用openssh官方最新的7.9p1源代码包,制作成为rpm包; 3、通过测试互信无问题,升级完成后需要把/etc/ssh/目录下的ssh_host相关的算法文件全部删除,重新加载后,重启sshd服务即可; 4、切记不要忘记把root...
  • http://www.openssh.com/ ... ...简介:这篇文章详细介绍了在 Linux 中怎么用源代码安装程序,以及怎么去卸载用源代码安装的程序。 Linux 发行版的一个最大的优点就是它的包管理器和...
  • 源代码仓库选择-gitlab

    2019-09-29 03:35:01
    综合对比GIT比SVN有更强大的版本控制管理,以及更方便拉取分支、打标签等特点,选择使用gitlab-ce作为源代码管理仓库。 OS (centos7) 版本选择(gitlab-ce-12.2.4-ce.0.el7.x86_64) 服务器IP: 10.10.10.10 下载...
  • 各个版本内核源代码 http://lxr.gwbnsh.net.cn/+trees
  • depot源代码

    2007-04-02 11:34:38
    应用rails进行敏捷web开发,alige web development with rails.测试代码没加进去。
  • 在Ubuntu系统中下载并编译Git源代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,497
精华内容 3,398
关键字:

openssh源代码