直至正文
豫言包府
← 众包

安全外壳会话 0.1.0

豫言 · 库

连接 SSH channel 数据与原生伪终端读写及流量窗口。

「重换钥。豫」存首次 session_id 与本轮待启之双向 AES-256-GCM 钥、IV。调用者以旧钥送且验 NEWKEYS 后,发收各自易钥;同向重易则拒。豫言客户与服务者探针皆可于认证后、开通道前主动再议;客户已与真 OpenSSH 服务者通,服务者已与真 OpenSSH 客通。服务者会话与客户互通探针今皆依双向报数自易钥,常限四千零九十六报。

「服务端重换钥。豫」核客、服 KEXINIT 之曲线、主钥、双向 GCM 及无压缩候选,复以客 ECDH_INIT、服务临时种与主私种造 ECDH_REPLY 及待易钥态。仍循首次 session_id;送回报、收发 NEWKEYS 与各向易钥,皆由调用者掌之。

「重换钥传输。豫」合余密缓冲与双向钥、IV 为一态。服务者既收客户 KEXINIT,可凭此态行加密 ECDH_INIT、ECDH_REPLY 与双向 NEWKEYS;己发 NEWKEYS 后乃易发钥,验彼 NEWKEYS 后乃易收钥。服务者先发之时,以旧钥验先至通道报,循序暂存,至多十六报、共一兆字;换钥后复交桥接。自发之限以本轮双向 IV 为基,常为任一向四千零九十六报;计数将尽则先易。

「应按时重换钥吗」受本轮始、此刻之单调钟纳秒数,限一至八万六千四百秒;足限则阳,钟倒行则报错。客户互通探针及服务者常流、PTY 双向桥皆用之,常隔三千六百秒,易钥后重记始刻。服务者桥与客户单步收报后候就绪,皆可周期复察时限;半报不使客户阻至整帧齐。

「客户端重换钥传输。豫」于已开会话得服务者 KEXINIT,复验 Ed25519 主钥签,循首次 session_id 派钥,于双向 NEWKEYS 之界各易之。豫言客户已与豫言服务者于无 PTY 微窗输出及 PTY 数据回传验此途。客户亦可于通道已开后先发 KEXINIT,候服务者协商时有界暂存已验通道报;开通道而未请命令之先发路已与真 OpenSSH 服务者通。

「客户端会话收包。豫」单步读验一密报;未足返零,完整通道或再议报返一,合法控制、未知全局请或增窗既治返二。余密缓冲及双向后继 IV 随果还。调用者得于零态候就绪而复察时限,不必阻至整帧齐。客户互通探针之微窗输出与久闲依时再议皆用此术。

无 PTY 常流及 PTY 双向桥既得已验之客户 KEXINIT,存旧窗、EOF、待写字与网余缓冲,换钥后以新钥续行;退出报与通道关闭亦用新发钥。候 CLOSE 时若复得 KEXINIT,仍试再议;己发 CLOSE 后,彼明发 DISCONNECT 或断连,可止候。客户发起之运行中再议已与真 OpenSSH 于二式互通;服务者依报数自发者亦于二式互通。客户互通探针依报数及依时自发者亦与真 OpenSSH 服务者通;客户单步收报,无字或半报时皆可周期复察时限。

「标准流桥接。豫」于无 PTY 会话,封 stdout 为 CHANNEL_DATA,stderr 为 CHANNEL_EXTENDED_DATA;二出同耗彼窗,读数不得逾最大包。stdin 单步写返实写数及未写余尾,调用者据实写数回增收窗。二出之 EOF 各别返,二者皆尽方宜发通道 EOF;「标准流会话。豫」掌单通道密报收发及三流就绪之循环;调用者掌子进程、exit-status 与 CLOSE 之寿命。

「双向转发终端」返发 IV、网余字、收 IV、彼 EOF 已至之爻,及在用发收钥。PTY 子进程可先终;调用者依 EOF 爻记通道寿命,以所返钥继发 exit-status、EOF、CLOSE。

标准流与 PTY 双向桥皆识本通道 signal 请,依 RFC 4254 常名调用原生术;惟向本库在籍子进程或 PTY 进程组发送,不回请答。未知扩展名暂略。豫言客与服务者已各验无 PTY、PTY 之 TERM、INT 请及相应 exit-signal;常退仍发 exit-status。

「桥接。豫」于已认证、已开之 SSH session 通道与本机 PTY 主端间转原字节。「等待连接与伪终端」一候网连及 PTY,网端恒候读,终端可择无、读、写、读写,别返二事件码与状态。入者先析 CHANNEL_DATA,减己收窗,复试非阻塞写 PTY;未写余尾原样还。「冲刷伪终端待写至尽」候可写而续冲,返累计已写数与余尾;逾次仍留尾,调用者未清前勿续收网报。出者所读不逾彼窗、彼最大通道包及六万五千五百三十六字节,并还彼新窗。入端待写限一兆字节。

入端状态零为成;普通负数为原生 -errno,-100001 至 -100004 分指报、通道、缓冲、参数之误,-100005 为待写重试次数尽。出端零为窗塞,一为得 CHANNEL_DATA,二为 PTY EOF 且得 CHANNEL_EOF,负为误。调用者按实写 PTY 字数发送 WINDOW_ADJUST,且 EOF 只发一回。此库不启程序,亦不总掌 SSH 连接状态。

「加密收包。豫」先自旧缓冲取一帧 AES-256-GCM 报而验签;未足则单步非阻塞读至多六万五千五百三十六字节,保半报、余帧及旧 IV。状态零待字,一已得报,二连已闭,负为头、签或网络之误。候字之际,会话循环可转治 PTY 事。客户与服务者探针皆以此术收加密报。

会话桥得已验之传输控制载物,严核 IGNORE、UNIMPLEMENTED、DEBUG 诸字段而续行;合法 DISCONNECT 则止,坏控制报则拒。PTY 与无 PTY 之循环皆施之。

通道行中得 GLOBAL_REQUEST,二桥皆核名与待答位,存其专用余文而不施未知请;待答则回 REQUEST_FAILURE,递进发向 IV 而续旧通道。不待答者径略,坏报则止。

「加密发包。豫」续写加密帧之未尽字,候可写而重试,报全发乃返后续 IV;若败,调用者当断此连。「双向终端。豫」为服务者单通道 PTY 桥:交治网与终端之就绪事,PTY 实写几字乃回增收窗,出文则守彼窗;析数据、增窗、EOF 与终端尺寸变,存余缓冲及二向 IV。调用前须已认证开通,授本地通道号零、最大收包三万二千七百六十八字节及规范行 PTY;客户 EOF 以 EOT 告终端。桥接不启亦不收子进程,不发 exit-status/CLOSE,皆由调用者行之。今惟单通道、有界空闲之术,不治会话中余类 SSH 报。

所赖

观包之制

上传之记

今修订:1 ·

  1. 修订 1
    取 ZIP

包之层级

父:安全外壳

无子包。