置 /tmp/yyssh互通/发送TERM信号,探针于 exec 成后发不待答 signal TERM,并核彼 exit-signal TERM。无 PTY 之 sleep 30 与 PTY 之 /bin/cat 已各与豫言服务者通。
置 /tmp/yyssh互通/发送INT信号,改发 signal INT 而核 exit-signal INT;无 PTY、PTY 皆通。二旗俱在则先试 INT。
置 /tmp/yyssh互通/会话控制模式,探针于 exec 应答后、通道数据或信号前,连发加密 IGNORE、UNIMPLEMENTED、DEBUG,以验服务者于会话中仍治传输控制报。
置 /tmp/yyssh互通/会话全局请求模式,探针于 exec 应答后发待答之未知全局请,核服务者回 REQUEST_FAILURE,继行通道会话。
置 /tmp/yyssh互通/会话全局无应答模式,探针发不待答之未知全局请,径续通道会话;二旗俱在,则从无应答式。
客户单步会话收报术亦与豫言服务者反向控制试互通:服务者发三类合法控制报及不待答未知全局请后,客户续成命令会话;服务者复发待答未知全局请,客户回 REQUEST_FAILURE,双方常退。
置 /tmp/yyssh互通/重换钥模式,客户于 Ed25519 认证成后、开 session 前,主动送加密 KEXINIT,与真 OpenSSH 或豫言服务者再行 Curve25519/Ed25519 换钥。客户验新主钥签,循首 session_id 派钥,以旧钥送收 NEWKEYS,发收各易新钥而继成会话。本机 OpenSSH sshd、豫言服务者此路及无此旗之常路皆已通。
置 /tmp/yyssh互通/等待服务端重换钥,客户于认证后先候服务者 KEXINIT,再应己 KEXINIT 与曲线初报。与豫言服务者主动再议而继成会话;此式先于客户主动式。
置 /tmp/yyssh互通/通道客户先发重换钥模式,客户于 session 通道既开、未请 env 与 exec 时先发 KEXINIT。新握手循首 session_id,核服务者主钥签而易双向钥;此试式要求候协商时无先至通道报。暂设真 OpenSSH sshd 之先发式及常式,皆已继成命令会话。
命令行中之收报环先治再议前已验而暂存之通道报,后取新钥下网报。置 /tmp/yyssh互通/运行客户先发重换钥模式,探针得首段常出乃由客户先发一回 KEXINIT;并置 /tmp/yyssh互通/须有暂存报模式,则必核此握手确有在途通道报。此严试已与暂设真 OpenSSH sshd 行 seq 1 1000:暂存非空,三千八百九十三字逐字同。
客户收报环亦依本轮任一向报数自发再议,常限四千零九十六报。置 /tmp/yyssh互通/自动重换钥模式 则降为四报,以供互通试。真 OpenSSH 服务者日志于一回 seq 1 1000 会话见首握及十五回运行中再议,输出逐字同;去低限旗之短会惟见首握。
客户收报环亦察单调钟,自本轮换钥起常满三千六百秒再议。置 /tmp/yyssh互通/计时重换钥模式 则改一秒,并行 sleep 2; seq 1 1000。单步收报未足,则候就绪至多一秒而复察钟,半报不阻至整帧齐;并置 /tmp/yyssh互通/须空闲换钥模式,必核换钥先于首段输出。与暂设真 OpenSSH sshd 之严试见首握及久闲再议二回,三千八百九十三字逐字同。微窗之报于换钥后仍实收,则复满候报余数,毋误判活会为超时;去旗之短会惟见首握。
通道行中若得服务者 KEXINIT,客户复验主钥签,依 NEWKEYS 各易钥。豫言服务者于 exec 应答后主动再议之验,含无 PTY 微窗 seq 1 1000 输出,及 PTY /bin/cat 先至 DATA、EOF、换钥后原字回传。
若有 /tmp/yyssh互通/用户私钥,探针先析无口令 OpenSSH Ed25519 私钥;无之乃读 用户私种 原三十二字。加密及坏常式钥皆拒。
置 /tmp/yyssh互通/不求会话应答,探针乃以阴为 PTY(若用)及 exec 之 want_reply,径入收会话之环,不候 CHANNEL_SUCCESS。此式已与豫言服务者验无 PTY exec、PTY 连 exec 二路。
若有 /tmp/yyssh互通/已知主机,探针先按 [127.0.0.1]:22222 于 known_hosts 核握手主钥;同钥见 @revoked 则拒连。此簿若无,仍循下述 .pub 或二进制主钥文。
此可执行包连本机 127.0.0.1:22222 之暂设 OpenSSH 服务,以豫言 TCP 术行版本、KEXINIT 与 Curve25519 初报回报,验彼 Ed25519 之签。若有 /tmp/yyssh互通/可信主钥.pub,探针严析单行 OpenSSH 公钥文;否则自 /tmp/yyssh互通/可信主钥 读预置 SSH 主钥二进制载物。彼之回报须与预置值全同,始得验签。继而交换 NEWKEYS,以所派 AES-256-GCM 钥发送加密 ssh-userauth 请求,探 none 认证,再以所载三十二字节 Ed25519 私种签公钥认证请求。用户名自 /tmp/yyssh互通/用户名 取;暂设服务须授对应公钥。编之赖 OpenSSL 头与 libcrypto。
服务请求前先发加密 IGNORE、DEBUG;认证后开 session,发待答之未授权 env 请而验 CHANNEL_FAILURE,继行固定 true。可越服务者 DEBUG、IGNORE、UNIMPLEMENTED、未知全局请求与合法增窗;未知全局请求若待答则回 REQUEST_FAILURE。会话循环依共用窗收常数据与 stderr 扩展数据,许退出状态、EOF 与输出交错;得 CLOSE 则回 CLOSE。寿命态拒重 EOF 及 EOF 后彼文。二路原字分别书入 /tmp/yyssh互通/远程标准输出 与 /tmp/yyssh互通/远程标准错误。此路既与真 OpenSSH sshd、亦与豫言一次服务者探针互通。
加密收报今用会话库非阻塞单步术:缓冲已有全报则先解,未足则试读一回,继依就绪事候之;收 IV 惟全报验真后递进。
验通道窗有本机暂件所启之定式:有 /tmp/yyssh互通/小窗口模式,则初收窗六十四字节,向 OpenSSH 行 seq 1 1000;有 /tmp/yyssh互通/服务端小窗口模式,则同窗向豫言服务者请 PTY、行 /bin/cat,送 /tmp/yyssh互通/本地输入;有 /tmp/yyssh互通/服务端一字窗口模式,后者窗改一字节。诸式皆以 /tmp/yyssh互通/预期标准输出 逐字验回文。真 OpenSSH sshd 三千八百九十三字节,豫言服务者一千字节及五字节之出皆已通过;常式仍行 true。
可另启终端,造暂用 Ed25519 主机钥,以 ssh-keygen -y 导公钥,取其 Base64 字段解码为 /tmp/yyssh互通/可信主钥;复造暂用 Ed25519 用户私种及获准公钥。令 OpenSSH 惟听回环地址二二二二二埠,启公钥认证而禁口令认证,既编此包而行之。验毕止服务,删诸暂钥。编译器参数宜授 --do-not-load-cache,免袭旧产物。