OPENSSH【源码分析】

【有空画图】

SSH客户端核服务端Daemon

SSH客户端:先参数的配置,然后ssh_login进入登录过程。ssh_login中会通过ssh_kex2来完成key exchange。ssh_kex2包括kex_setup来初步设置(包括向服务端发送SSH2_MSG_KEXINIT标志,已经接收服务端传来的相关消息),此外还会注册诸如kexgex_client(这个函数是配套openssl使用的)的函数用于之后进行具体密钥交换的过程(用于采用前期注册,后面传参指定某个注册函数的方式,控制流和数据流不好捕获)。ssh_login中ssh_userauth2会进行用户认证。登录过程结束后,ssh_session2会启动正式的会话,包含了client_loop来真正的循环发送、接收消息。

SSHD服务端守护进程:参数设置,调用server_accept_loop监听请求,然后会fork出子进程来完成与SSH客户端的交互,从父进程相同代码行往下执行(IP寄存器值不变)。之后的任务都是子进程来做,父进程持续处于server_accept_loop中的循环。do_ssh2_kex是服务端这边与客户端进行key exchange,包括kex_setup初步设置,注册kexgex_server(这个函数是配套openssl使用的)等函数进行密钥交换。do_authentication2是协同客户端完成用户验证。之后进入do_authenticated函数并进入server_loop2,同SSH客户端具体交互。

其他

网络通信应该都是基于Socket的(会用到Socket通信的那些函数)。channel_init_channels会初始化channel,包括channel_handler_init注册pre、post两大类函数。

sshpkt_前缀的函数通过sshbuf_前缀的函数来传递消息,但似乎是将数据传到buf后,通过某种方式将数据通过channel发送出去或者接收进来(没看到明显的函数调用?可能通过注册了函数来执行,但也没看到使用注册过的函数?)。

密钥交换中openssl相关的函数是在WITH_OPENSSL宏下被选择开启。

cipher_crypt会进行消息的加密,通过WITH_OPENSSL选择具体使用的函数。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值