会话行中识本通道不待答 signal;无 PTY 惟向在籍子进程发之,PTY 惟向在籍控制终端进程组发之。豫言客二式皆验 TERM、INT 并得相应 exit-signal。未知扩展名不施。
客户于 exec 应答后连发加密 IGNORE、UNIMPLEMENTED、DEBUG,服务者于无 PTY 及 PTY 会话皆续治其后 INT 请,返 exit-signal。
客户于无 PTY 与 PTY 会话发待答之未知 GLOBAL_REQUEST,服务者回 REQUEST_FAILURE 后续治 INT;无 PTY 亦验不待答之请径续而不回报。
置 /tmp/yyssh服务端互通/服务端会话控制模式,服务者于命令应答后发 IGNORE、UNIMPLEMENTED、DEBUG 及不待答未知 GLOBAL_REQUEST。复置 /tmp/yyssh服务端互通/服务端会话全局待答模式,别发待答未知全局请,核客户回 REQUEST_FAILURE。豫言客户用单步会话收报术,二式皆继成命令会话;去旗之常路亦通。
真 OpenSSH 客以 RekeyLimit=4K 于通道行中屡发 KEXINIT:无 PTY /bin/cat 回十三万一千七十二字,与输入逐字同;PTY /bin/cat 去终端常添之 CR 后,四万八千八百九十四字亦逐字同。二途皆于多轮易钥后常发退出与关闭报,服务者常退。
服务者常流及 PTY 双向桥亦察单调钟,自本轮易钥起常隔三千六百秒。置 /tmp/yyssh服务端互通/计时重换钥模式 则限一秒;真 OpenSSH 客行 sleep 2; printf YYSSH_SERVER_TIME_OK,及 PTY /bin/cat 延二秒得输入,二途客户日志皆见首握与运行中再议二回,回文正确,双方常退。去旗之 exit 23 短会惟见首握,退码二十三。
置 /tmp/yyssh服务端互通/会话主动重换钥模式,探针于 exec 应答后送 KEXINIT。旧钥下先至之通道报有界暂存,于 NEWKEYS 后循序交桥。豫言客户之无 PTY 微窗输出与 PTY /bin/cat 输入皆通;真 OpenSSH 客于此式既得预期退码二十三,亦以无 PTY cat 回十二万字,逐字同输入。去此旗之常式 OpenSSH 命令亦复验。
认证既成,服务者探针可识客户主动所送加密 KEXINIT,复以曲线、Ed25519 行第二轮换钥,于双向 NEWKEYS 之界各易钥与 IV。置 /tmp/yyssh服务端互通/主动重换钥模式,服务者乃主动送 KEXINIT;若单条 CHANNEL_OPEN 先至,暂存而于换钥后行之。豫言客户之二发起方向与真 OpenSSH 客对服务者主动再议,皆继成命令会话。通道行中既可治客户所发再议,亦可依任一向报数自发;常限每轮四千零九十六报。置 /tmp/yyssh服务端互通/自动重换钥模式 则限四报,以供互通试。无 PTY 回二十六万二千一百四十四字、PTY 回四万八千八百九十四字皆同输入;真 OpenSSH 日志分别见十一、六十次 KEXINIT 接收,含首次握手。依时易钥尚未备,在途通道报限十六条、共一兆字。
若有 /tmp/yyssh服务端互通/主机私钥,探针先析无口令 OpenSSH Ed25519 私钥;无之乃读 主机私种 原三十二字。加密及坏常式钥皆拒。
PTY、shell、exec 诸请皆循 want_reply:阳乃报 CHANNEL_SUCCESS,阴亦行其请而径入后会。豫言客已验无 PTY exec 及 PTY 连 exec 之不待答路;真 OpenSSH 客之待答 exec 亦复验通过。
无 PTY shell 请亦入同一标准流会话循环:服务者起当前用户 /bin/sh,收客户 stdin,别转常出与误出。真 OpenSSH 客以 ssh -T 送 echo YUYAN_NO_PTY_SHELL_OK、exit,双方皆零退;添此分流后,exec 二出之回归亦过。
无 PTY exec 路认证后核命令非空、至多六万五千五百三十六字节且无内零,再以当前用户身行 /bin/sh -c。服务者以加密通道文写子进程 stdin,别封 stdout、stderr 为 CHANNEL_DATA、CHANNEL_EXTENDED_DATA,同耗彼窗,返实 exit-status。已与真 OpenSSH 客验二出分流、cat 回文一十二万零八百九十四字逐字皆同,及 exit 23 得二十三。探针仍限回环、单连、有界空闲;高权限多用户制未备。
PTY shell 路受真 OpenSSH 客之 shell 请,起当前用户 /bin/sh,双向转令文与输出,依子进程实退码报 exit-status。已验输入 echo YUYAN_SHELL_OK、exit,客与服务者皆零退。cat、tty 二路亦各复验双向、单向转发。
若有 /tmp/yyssh服务端互通/authorized_keys,探针先逐行寻请求所呈 Ed25519 钥,可列多钥。no-pty、restrict 等可行之限随认证入会话;终端请获 CHANNEL_FAILURE 与 CHANNEL_CLOSE,无 PTY 命令仍可行,真 OpenSSH 客二路皆已验。余前置选项不授登。此文若无,仍循下述 .pub 或三十二字单钥文。
若有 /tmp/yyssh服务端互通/获准公钥.pub,探针自单行 OpenSSH ssh-ed25519 公钥文取获准钥;否则循 /tmp/yyssh服务端互通/获准公钥 之三十二原字公钥。真 OpenSSH 客用 ssh-keygen 所造 .pub 文件认证已通过。
/bin/cat 路今调用「安全外壳会话/双向终端。豫」,一候网连与 PTY,交治收报、终端读写及增窗;己窗惟依 PTY 实写字数回补,出文则守彼窗。从端禁回显而存规范行。真 OpenSSH 客送二万二千编号行,计十三万二千字节,逾初收窗二倍;诸行皆按序各回一回,无缺无重。
豫言客探针另以六十四字节与一字节初收窗请 PTY cat;服务者分别全回一千字节与五字节。一字节窗每发一字即尽,须候下一次 WINDOW_ADJUST 方续。
服务者今以非阻塞单步收加密报,存半报、余帧及收 IV。OpenSSH 于 exec 前常发数条 env 通道请;探针严析而不施环境,待答则回 CHANNEL_FAILURE。无 PTY 之 true、有 PTY 之 /usr/bin/tty 与 /bin/cat 皆已与真 OpenSSH 客互通;PTY 路发 CLOSE 后亦候彼 CLOSE,乃闭 TCP。
无 PTY 之 true 路发己 EOF/CLOSE 后,以通道寿命态候彼 CLOSE;彼 EOF 重至则拒,二端皆闭方止 TCP。
认证成后,探针发未知而待答之 probe@example.com 全局请求;CHANNEL_OPEN 与 REQUEST_FAILURE 先后皆可,二者既验乃确认通道。固定 true 路发退出状态、EOF、CLOSE 后,候客户回 CHANNEL_CLOSE 始闭 TCP。真 OpenSSH 客与豫言客皆已行此程。
此一次测试程序听 127.0.0.1:22222,读 /tmp/yyssh服务端互通/主机私种 之 Ed25519 私种、用户名 及 authorized_keys、.pub 或 获准公钥。与 OpenSSH 客互通版本、KEXINIT、Curve25519、NEWKEYS 及加密服务请求;拒 none。公钥认证至多试十二次:非获准者回 USERAUTH_FAILURE,获准试探回 PK_OK,惟用户、服务、会话号及 Ed25519 签皆合,乃发 USERAUTH_SUCCESS;第十二次败则发加密 DISCONNECT,原因码十四。OpenSSH 客先试未授权钥获拒,继以获准钥登成;惟试十二错钥则得明确断开报。两途探针皆闭连接及监听而常退;惟认证成者继验 session 开通。无 PTY 时行获准用户所请 exec 命令,有 PTY 时受 shell 请起 /bin/sh,或许 /usr/bin/tty 与 /bin/cat 之 exec,起当前用户之真控制终端子进程,依彼窗转发其输出。cat 路收客户 CHANNEL_DATA 入 PTY,部分写入则候可写限次续冲,按累计实写数回增窗;遇客户 EOF,则写 EOT 于终端。上述测试四路皆报退出状态零,OpenSSH 客亦以零退出;tty 实回 /dev/ttys...,cat 回测试文。cat 路已验多轮收窗之文;探针仍限单连、受限 exec 及有界空闲,未纳通用久会话。测试须预置相合主公钥而严验之;毕则删暂私钥。