network-infra-utility 0.3.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +21 -0
- data/GUIDE.md +212 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +70 -0
- data/Rakefile +1 -1
- data/bin/dns-query +836 -0
- data/bin/geo-doc +135 -0
- data/bin/geo-get +1 -1
- data/bin/geo-update +429 -0
- data/document/ASNum/346/250/241/345/235/227/345/212/237/350/203/275/350/257/264/346/230/216.md +242 -0
- data/document/DNSQuery/345/267/245/345/205/267/344/275/277/347/224/250/346/226/271/346/263/225.md +248 -0
- data/document/Geo/345/221/275/344/273/244/345/267/245/345/205/267/344/275/277/347/224/250/346/226/271/346/263/225.md +441 -0
- data/document/IP/346/250/241/345/235/227/345/212/237/350/203/275/350/257/264/346/230/216.md +297 -0
- data/document/MAC/346/250/241/345/235/227/345/212/237/350/203/275/350/257/264/346/230/216.md +296 -0
- data/document/SSH/350/277/236/346/216/245/345/256/242/346/210/267/347/253/257/344/275/277/347/224/250/346/226/271/346/263/225.md +764 -0
- data/network-infra-utility.gemspec +4 -2
- data/network.rb +3 -1
- data/service/geodb/geodb.rb +278 -1
- data/service/ssh/README.md +955 -0
- data/service/ssh/bin/ssh-client +198 -0
- data/service/ssh/design/SSH/350/277/236/346/216/245/345/256/242/346/210/267/347/253/257/345/212/237/350/203/275/351/234/200/346/261/202/346/226/207/346/241/243.md +292 -0
- data/service/ssh/design/SSH/350/277/236/346/216/245/345/256/242/346/210/267/347/253/257/350/257/246/347/273/206/350/256/276/350/256/241/346/226/207/346/241/243.md +1521 -0
- data/service/ssh/design/SSH/350/277/236/346/216/245/345/256/242/346/210/267/347/253/257/350/275/257/344/273/266/350/256/276/350/256/241/346/226/207/346/241/243.md +2493 -0
- data/service/ssh/ext/ssh_core/bin/ssh_core.cmd +28 -0
- data/service/ssh/ext/ssh_core/config/sys.config +0 -0
- data/service/ssh/ext/ssh_core/config/vm.args +0 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/CHECKSUM +1 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/LICENSE +21 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/README.md +696 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/VERSION +1 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/contents.tar.gz +0 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/metadata.config +15 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/rebar.config +17 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/rebar.lock +1 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx.app.src +10 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx.erl +506 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_config.erl +393 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_config.hrl +18 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_consult.erl +81 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_decoder.erl +1909 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_encoder.erl +116 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_parser.erl +1214 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_to_json.erl +408 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_to_term.erl +389 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/jsx_verify.erl +121 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx.erl +506 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_config.erl +393 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_config.hrl +18 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_consult.erl +81 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_decoder.erl +1909 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_encoder.erl +116 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_parser.erl +1214 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_to_json.erl +408 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_to_term.erl +389 -0
- data/service/ssh/ext/ssh_core/local_deps/jsx/src/src/jsx_verify.erl +121 -0
- data/service/ssh/ext/ssh_core/rebar.config +24 -0
- data/service/ssh/ext/ssh_core/rebar.lock +1 -0
- data/service/ssh/ext/ssh_core/src/ssh_auth_engine.erl +156 -0
- data/service/ssh/ext/ssh_core/src/ssh_channel_stm.erl +232 -0
- data/service/ssh/ext/ssh_core/src/ssh_codec.erl +83 -0
- data/service/ssh/ext/ssh_core/src/ssh_conn_sup.erl +48 -0
- data/service/ssh/ext/ssh_core/src/ssh_conn_worker.erl +535 -0
- data/service/ssh/ext/ssh_core/src/ssh_core.app.src +36 -0
- data/service/ssh/ext/ssh_core/src/ssh_core_app.erl +11 -0
- data/service/ssh/ext/ssh_core/src/ssh_core_sup.erl +46 -0
- data/service/ssh/ext/ssh_core/src/ssh_infra_sup.erl +117 -0
- data/service/ssh/ext/ssh_core/src/ssh_ipc.hrl +80 -0
- data/service/ssh/ext/ssh_core/src/ssh_ipc_coalesce.erl +94 -0
- data/service/ssh/ext/ssh_core/src/ssh_ipc_gateway.erl +467 -0
- data/service/ssh/ext/ssh_core/src/ssh_ipc_proto.erl +95 -0
- data/service/ssh/ext/ssh_core/src/ssh_jump_chain.erl +101 -0
- data/service/ssh/ext/ssh_core/src/ssh_keepalive_mgr.erl +222 -0
- data/service/ssh/ext/ssh_core/src/ssh_known_hosts_proxy.erl +67 -0
- data/service/ssh/ext/ssh_core/src/ssh_port_fwd.erl +225 -0
- data/service/ssh/ext/ssh_core/src/ssh_sftp_session.erl +250 -0
- data/service/ssh/ext/ssh_core/src/ssh_sftp_sup.erl +62 -0
- data/service/ssh/ext/ssh_core_rs/Cargo.lock +2345 -0
- data/service/ssh/ext/ssh_core_rs/Cargo.toml +30 -0
- data/service/ssh/ext/ssh_core_rs/bin/ssh_core_rs +34 -0
- data/service/ssh/ext/ssh_core_rs/bin/ssh_core_rs.cmd +40 -0
- data/service/ssh/ext/ssh_core_rs/src/channel.rs +296 -0
- data/service/ssh/ext/ssh_core_rs/src/coalesce.rs +143 -0
- data/service/ssh/ext/ssh_core_rs/src/codec.rs +71 -0
- data/service/ssh/ext/ssh_core_rs/src/conn.rs +628 -0
- data/service/ssh/ext/ssh_core_rs/src/gateway.rs +389 -0
- data/service/ssh/ext/ssh_core_rs/src/handler.rs +293 -0
- data/service/ssh/ext/ssh_core_rs/src/keepalive.rs +194 -0
- data/service/ssh/ext/ssh_core_rs/src/main.rs +351 -0
- data/service/ssh/ext/ssh_core_rs/src/portfwd.rs +378 -0
- data/service/ssh/ext/ssh_core_rs/src/proto.rs +198 -0
- data/service/ssh/ext/ssh_core_rs/src/sftp.rs +294 -0
- data/service/ssh/lib/network_infra_utility/ssh/automation/macro_engine.rb +213 -0
- data/service/ssh/lib/network_infra_utility/ssh/client.rb +257 -0
- data/service/ssh/lib/network_infra_utility/ssh/config/schema.rb +90 -0
- data/service/ssh/lib/network_infra_utility/ssh/config/settings.rb +103 -0
- data/service/ssh/lib/network_infra_utility/ssh/config/store.rb +90 -0
- data/service/ssh/lib/network_infra_utility/ssh/ipc/coalesce.rb +83 -0
- data/service/ssh/lib/network_infra_utility/ssh/ipc/errors.rb +36 -0
- data/service/ssh/lib/network_infra_utility/ssh/ipc/router.rb +212 -0
- data/service/ssh/lib/network_infra_utility/ssh/ipc/transport.rb +81 -0
- data/service/ssh/lib/network_infra_utility/ssh/security/host_key.rb +211 -0
- data/service/ssh/lib/network_infra_utility/ssh/security/vault.rb +211 -0
- data/service/ssh/lib/network_infra_utility/ssh/session/history.rb +56 -0
- data/service/ssh/lib/network_infra_utility/ssh/session/manager.rb +92 -0
- data/service/ssh/lib/network_infra_utility/ssh/session/session.rb +109 -0
- data/service/ssh/lib/network_infra_utility/ssh/session/tree.rb +95 -0
- data/service/ssh/lib/network_infra_utility/ssh/terminal/ansi_parser.rb +435 -0
- data/service/ssh/lib/network_infra_utility/ssh/terminal/buffer.rb +78 -0
- data/service/ssh/lib/network_infra_utility/ssh/terminal/emulator.rb +159 -0
- data/service/ssh/lib/network_infra_utility/ssh/terminal/logger.rb +195 -0
- data/service/ssh/lib/network_infra_utility/ssh/terminal/screen.rb +212 -0
- data/service/ssh/lib/network_infra_utility/ssh/terminal/theme.rb +127 -0
- data/service/ssh/lib/network_infra_utility/ssh/version.rb +7 -0
- data/service/ssh/lib/network_infra_utility/ssh.rb +44 -0
- data/support/basic/as_num.rb +221 -0
- data/support/basic/mac_address.rb +281 -0
- data/version.rb +1 -1
- metadata +142 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7104fdb4e0af5c22afd54d3668e4ffc76641fbe81960c8f846140cdfd5e31c7b
|
|
4
|
+
data.tar.gz: bf059325d90e039e8902e0619593737dee159790a448561c5df2f9c7e3a939df
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ff00412f6b6deb87dbf766f7a84022ea2bd57a6f337e437cdb36931e4b67f8d373d4ee0dd6097141f927a4889c96e8a472ff4b793d131e3c3363248b8a321681
|
|
7
|
+
data.tar.gz: 5e84775da10cd26e0750dbca13dfa8ec5a731db56175192cc96b2d217660078d4c04d1a737d8731415f9a487afd748c1da33fac74fa21771b1aef1122d23c241
|
data/.gitignore
CHANGED
|
@@ -55,3 +55,24 @@ build-iPhoneSimulator/
|
|
|
55
55
|
|
|
56
56
|
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
|
57
57
|
# .rubocop-https?--*
|
|
58
|
+
|
|
59
|
+
## Erlang/OTP build artifacts:
|
|
60
|
+
*.beam
|
|
61
|
+
*.appup
|
|
62
|
+
erl_crash.dump
|
|
63
|
+
/ebin/
|
|
64
|
+
/.eunit/
|
|
65
|
+
|
|
66
|
+
## rebar3 build:
|
|
67
|
+
.rebar3/
|
|
68
|
+
/_build/
|
|
69
|
+
**/_build/
|
|
70
|
+
/rebar3.crashdump
|
|
71
|
+
|
|
72
|
+
## erlang.mk build:
|
|
73
|
+
.erlang.mk/
|
|
74
|
+
/deps/
|
|
75
|
+
/_rel/
|
|
76
|
+
|
|
77
|
+
## Rust / Cargo build artifacts:
|
|
78
|
+
target/
|
data/GUIDE.md
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
AIGC:
|
|
3
|
+
ContentProducer: '001191110102MAD55U9H0F10002'
|
|
4
|
+
ContentPropagator: '001191110102MAD55U9H0F10002'
|
|
5
|
+
Label: '1'
|
|
6
|
+
ProduceID: '6a4e300b-498c-4b8e-aca3-75d6bf706299'
|
|
7
|
+
PropagateID: '6a4e300b-498c-4b8e-aca3-75d6bf706299'
|
|
8
|
+
ReservedCode1: '322e695f-ea2e-4e18-a164-50a935a6be6d'
|
|
9
|
+
ReservedCode2: '322e695f-ea2e-4e18-a164-50a935a6be6d'
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# GUIDE
|
|
13
|
+
|
|
14
|
+
## 在 Alpine 设备上重新编译 Rust 和 Erlang 引擎
|
|
15
|
+
|
|
16
|
+
项目 SSH 核心引擎有两个后端,均可在 Alpine(musl libc)上原生编译:
|
|
17
|
+
|
|
18
|
+
| 引擎 | 目录 | 构建工具 | 产物 |
|
|
19
|
+
|------|------|---------|------|
|
|
20
|
+
| **Rust 引擎**(默认) | `service/ssh/ext/ssh_core_rs/` | cargo | `target/release/ssh_core_rs` |
|
|
21
|
+
| **Erlang 引擎**(可选) | `service/ssh/ext/ssh_core/` | rebar3 | `_build/default/lib/ssh_core/ebin/*.beam` |
|
|
22
|
+
|
|
23
|
+
### 2.1 安装编译依赖
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 更新包索引
|
|
27
|
+
apk update
|
|
28
|
+
|
|
29
|
+
# 通用编译工具链(gcc、make、musl-dev、libc Headers 等)
|
|
30
|
+
apk add build-base
|
|
31
|
+
|
|
32
|
+
# ── Rust 引擎依赖 ──
|
|
33
|
+
apk add rust cargo
|
|
34
|
+
apk add pkgconf openssl-dev # openssl-dev 预防部分 crate 需要链接系统 OpenSSL
|
|
35
|
+
|
|
36
|
+
# ── Erlang 引擎依赖 ──
|
|
37
|
+
# 方式 A:Alpine 仓库安装(Alpine 3.19+ 提供 OTP 26)
|
|
38
|
+
apk add erlang rebar3
|
|
39
|
+
|
|
40
|
+
# 方式 B:如果仓库 OTP 版本低于 26,从源码编译 Erlang/OTP
|
|
41
|
+
# 见下方 2.3 节
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2.2 编译 Rust 引擎
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
cd service/ssh/ext/ssh_core_rs
|
|
48
|
+
|
|
49
|
+
# 清理旧产物(如从其他平台拷贝过来)
|
|
50
|
+
rm -rf target/
|
|
51
|
+
|
|
52
|
+
# Release 编译
|
|
53
|
+
cargo build --release
|
|
54
|
+
|
|
55
|
+
# 验证产物
|
|
56
|
+
ls -lh target/release/ssh_core_rs
|
|
57
|
+
./target/release/ssh_core_rs --help 2>&1 || true
|
|
58
|
+
# 引擎启动后会在 /tmp/ssh_core_<uid>.endpoint 写入端点文件
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**说明:**
|
|
62
|
+
- Alpine 默认 host triple 是 `x86_64-unknown-linux-musl`(ARM 则为 `aarch64-unknown-linux-musl`),cargo 会自动选择,无需额外配置 target。
|
|
63
|
+
- `Cargo.toml` 中 russh 使用 `ring` 特性(纯 Rust 加密后端),不依赖系统 OpenSSL / NASM,musl 环境可直接编译。
|
|
64
|
+
- 编译后 `bin/ssh_core_rs`(bash 启动脚本)已存在,Ruby 端 `Client.new(backend: :rust)` 会自动调用它。
|
|
65
|
+
|
|
66
|
+
### 2.3 编译 Erlang 引擎
|
|
67
|
+
|
|
68
|
+
> 如果 `apk add erlang` 安装的 OTP 版本 >= 26,直接跳到 2.3.2。
|
|
69
|
+
|
|
70
|
+
#### 2.3.1 从源码编译 Erlang/OTP(仅当仓库版本 < 26 时需要)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# 安装 Erlang 编译依赖
|
|
74
|
+
apk add build-base perl ncurses-dev openssl-dev unixodbc-dev
|
|
75
|
+
|
|
76
|
+
# 下载 OTP 27(或 26)
|
|
77
|
+
cd /tmp
|
|
78
|
+
wget https://github.com/erlang/otp/releases/download/OTP-27.3.3/otp_src_27.3.3.tar.gz
|
|
79
|
+
tar xzf otp_src_27.3.3.tar.gz
|
|
80
|
+
cd otp_src_27.3.3
|
|
81
|
+
|
|
82
|
+
# 编译(musl 环境,禁用 wx/mac 等 GUI 组件,保留 ssh/crypto/public_key)
|
|
83
|
+
export ERL_TOP=/tmp/otp_src_27.3.3
|
|
84
|
+
./configure \
|
|
85
|
+
--prefix=/usr/local/erlang \
|
|
86
|
+
--without-ssl-verify \
|
|
87
|
+
--disable-nls \
|
|
88
|
+
--without-javac \
|
|
89
|
+
--without-wx \
|
|
90
|
+
--without-debugger
|
|
91
|
+
make -j$(nproc)
|
|
92
|
+
make install
|
|
93
|
+
|
|
94
|
+
# 加入 PATH
|
|
95
|
+
export PATH=/usr/local/erlang/bin:$PATH
|
|
96
|
+
echo 'export PATH=/usr/local/erlang/bin:$PATH' >> ~/.profile
|
|
97
|
+
|
|
98
|
+
# 验证
|
|
99
|
+
erl -version
|
|
100
|
+
# Erlang (SHELL) version 27.3.3
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
#### 2.3.2 安装 rebar3
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# 方式 A:Alpine 仓库已安装则跳过
|
|
107
|
+
rebar3 --version
|
|
108
|
+
|
|
109
|
+
# 方式 B:下载 standalone 二进制
|
|
110
|
+
wget https://github.com/erlang/rebar3/releases/download/3.24.0/rebar3
|
|
111
|
+
chmod +x rebar3
|
|
112
|
+
mv rebar3 /usr/local/bin/
|
|
113
|
+
rebar3 --version
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### 2.3.3 编译 ssh_core
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
cd service/ssh/ext/ssh_core
|
|
120
|
+
|
|
121
|
+
# 清理旧产物
|
|
122
|
+
rm -rf _build/ rebar3.crashdump
|
|
123
|
+
|
|
124
|
+
# 编译
|
|
125
|
+
# rebar.config 中 {deps, []}(无外部依赖),jsx 已内嵌为本地源码
|
|
126
|
+
# (local_deps/jsx/src/src/),通过 src_dirs 直接编译,无需从 hex.pm 拉取
|
|
127
|
+
rebar3 compile
|
|
128
|
+
|
|
129
|
+
# 验证产物
|
|
130
|
+
ls _build/default/lib/ssh_core/ebin/*.beam | head -5
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> **常见问题**:启动时如果报 `undefined function os:getuid/0`,是因为 OTP 版本 < 26 缺少此 BIF。代码已修复为自动 fallback 到 `os:cmd("id -u")`,确保 `rebar3 compile` 重新编译即可。
|
|
134
|
+
|
|
135
|
+
#### 2.3.4 创建 Unix 启动脚本
|
|
136
|
+
|
|
137
|
+
项目当前只有 `bin/ssh_core.cmd`(Windows),Linux/Alpine 需要创建 `bin/ssh_core`:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
cat > service/ssh/ext/ssh_core/bin/ssh_core << 'SCRIPT'
|
|
141
|
+
#!/usr/bin/env sh
|
|
142
|
+
# ssh_core engine launcher for Linux/macOS/Alpine
|
|
143
|
+
set -e
|
|
144
|
+
|
|
145
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
146
|
+
SSH_CORE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
147
|
+
EBIN_DIR="$SSH_CORE_DIR/_build/default/lib/ssh_core/ebin"
|
|
148
|
+
|
|
149
|
+
# Delete stale endpoint file
|
|
150
|
+
ENDPOINT_FILE="/tmp/ssh_core_$(id -u).endpoint"
|
|
151
|
+
rm -f "$ENDPOINT_FILE"
|
|
152
|
+
|
|
153
|
+
# Start the Erlang VM
|
|
154
|
+
exec erl -noshell -noinput -pa "$EBIN_DIR" \
|
|
155
|
+
-eval "application:ensure_all_started(ssh_core)"
|
|
156
|
+
SCRIPT
|
|
157
|
+
chmod +x service/ssh/ext/ssh_core/bin/ssh_core
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### 2.3.5 验证 Erlang 引擎可启动
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
cd service/ssh/ext/ssh_core
|
|
164
|
+
./bin/ssh_core &
|
|
165
|
+
# 等 2 秒后查看端点文件
|
|
166
|
+
sleep 2 && cat /tmp/ssh_core_$(id -u).endpoint
|
|
167
|
+
# 应输出类似:tcp://127.0.0.1:xxxxx\n<auth_token>
|
|
168
|
+
|
|
169
|
+
# 停止引擎
|
|
170
|
+
kill %1
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 2.4 编译后的 Ruby 端验证
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 在项目根目录,确认 Ruby 可连接引擎
|
|
177
|
+
ruby -e '
|
|
178
|
+
$LOAD_PATH.unshift("service/ssh/lib")
|
|
179
|
+
require "network_infra_utility/ssh"
|
|
180
|
+
|
|
181
|
+
# Rust 引擎(默认)
|
|
182
|
+
client = NetworkInfraUtility::SSH::Client.new(backend: :rust)
|
|
183
|
+
client.start_engine
|
|
184
|
+
puts "Rust engine: #{client.started?}"
|
|
185
|
+
client.stop
|
|
186
|
+
|
|
187
|
+
# Erlang 引擎
|
|
188
|
+
client2 = NetworkInfraUtility::SSH::Client.new(backend: :erlang)
|
|
189
|
+
client2.start_engine
|
|
190
|
+
puts "Erlang engine: #{client2.started?}"
|
|
191
|
+
client2.stop
|
|
192
|
+
'
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 2.5 常见问题
|
|
196
|
+
|
|
197
|
+
| 问题 | 原因 | 解决 |
|
|
198
|
+
|------|------|------|
|
|
199
|
+
| `cargo build` 报 `linker cc not found` | 未安装 build-base | `apk add build-base` |
|
|
200
|
+
| `cargo build` 拉 crates.io 超时 | 国内网络限制 | `~/.cargo/config.toml` 配中科大/清华镜像源 |
|
|
201
|
+
| `cargo build` 报 `edition2024 is required` | Alpine 仓库 Rust 版本过旧 (< 1.85) | `apk del rust cargo` 后用 rustup 装最新稳定版 |
|
|
202
|
+
| `curl https://sh.rustup.rs` 下载不动 | rustup 安装脚本在国外 | 设 `RUSTUP_DIST_SERVER` 中科大镜像,或直接下载 rustup-init 二进制 |
|
|
203
|
+
| `rebar3 compile` 报 `undef ssh` 模块 | OTP 版本 < 26 | 按本文 2.3.1 从源码编译 OTP 27 |
|
|
204
|
+
| Erlang 引擎报 `undefined function os:getuid/0` | OTP < 26 缺少此 BIF | 代码已修复自动 fallback,`rebar3 compile` 重新编译 |
|
|
205
|
+
| Erlang 引擎启动报 `ssh_core beam not found` | `bin/ssh_core` 脚本 EBIN_DIR 路径不对 | 确认 `_build/default/lib/ssh_core/ebin/` 下有 beam 文件 |
|
|
206
|
+
| Ruby 报 `Engine binary not found` | 缺少启动脚本 | Rust: 确认 `bin/ssh_core_rs` 存在;Erlang: 按本文 2.3.4 创建 `bin/ssh_core` |
|
|
207
|
+
| Ruby 报 `Permission denied` 启动脚本 | Windows 拷来的脚本丢失执行位 | `chmod +x service/ssh/ext/ssh_core_rs/bin/ssh_core_rs` |
|
|
208
|
+
| Ruby 报 `ECONNREFUSED` 连接引擎 | 旧引擎残留进程占用端口 | `pkill ssh_core_rs; rm -f /tmp/ssh_core_*.endpoint` |
|
|
209
|
+
| `conn.connect` 超时 (60s) | 网络不通或设备 SSH 不兼容 | 先 `ping`/`nc -zv` 确认网络,再用 `RUST_LOG=debug` 定位 |
|
|
210
|
+
| `auth_rejected` 认证被拒绝 | 设备只支持 keyboard-interactive | 配置文件 `auth.type` 改为 `keyboard_interactive` |
|
|
211
|
+
| Rust 编译卡在 `ring` 或 `aws-lc-rs` | 误用了 aws-lc-rs 后端 | Cargo.toml 已指定 `features = ["ring"]`,确认未被覆盖 |
|
|
212
|
+
| `error: musl-gcc: not found` | 部分 crate 尝试用 musl-gcc | `apk add musl-dev`(已含于 build-base) |
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
network-infra-utility (0.4.0)
|
|
5
|
+
json (~> 2.6)
|
|
6
|
+
puma (~> 6.0)
|
|
7
|
+
rackup (~> 2.0)
|
|
8
|
+
roda (~> 3.0)
|
|
9
|
+
thor (~> 1.3)
|
|
10
|
+
|
|
11
|
+
GEM
|
|
12
|
+
remote: https://rubygems.org/
|
|
13
|
+
specs:
|
|
14
|
+
base64 (0.3.0)
|
|
15
|
+
diff-lcs (1.6.2)
|
|
16
|
+
json (2.20.0)
|
|
17
|
+
nio4r (2.7.5)
|
|
18
|
+
puma (6.6.1)
|
|
19
|
+
nio4r (~> 2.0)
|
|
20
|
+
rack (3.2.6)
|
|
21
|
+
rackup (2.3.1)
|
|
22
|
+
rack (>= 3)
|
|
23
|
+
rake (13.3.1)
|
|
24
|
+
roda (3.105.0)
|
|
25
|
+
rack
|
|
26
|
+
rspec (3.13.2)
|
|
27
|
+
rspec-core (~> 3.13.0)
|
|
28
|
+
rspec-expectations (~> 3.13.0)
|
|
29
|
+
rspec-mocks (~> 3.13.0)
|
|
30
|
+
rspec-core (3.13.6)
|
|
31
|
+
rspec-support (~> 3.13.0)
|
|
32
|
+
rspec-expectations (3.13.5)
|
|
33
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
34
|
+
rspec-support (~> 3.13.0)
|
|
35
|
+
rspec-mocks (3.13.8)
|
|
36
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
37
|
+
rspec-support (~> 3.13.0)
|
|
38
|
+
rspec-support (3.13.7)
|
|
39
|
+
thor (1.5.0)
|
|
40
|
+
|
|
41
|
+
PLATFORMS
|
|
42
|
+
x64-mingw-ucrt
|
|
43
|
+
|
|
44
|
+
DEPENDENCIES
|
|
45
|
+
base64 (~> 0.2)
|
|
46
|
+
network-infra-utility!
|
|
47
|
+
rake (~> 13.0)
|
|
48
|
+
rspec (~> 3.0)
|
|
49
|
+
thor (~> 1.3)
|
|
50
|
+
|
|
51
|
+
CHECKSUMS
|
|
52
|
+
base64 (0.3.0)
|
|
53
|
+
diff-lcs (1.6.2)
|
|
54
|
+
json (2.20.0)
|
|
55
|
+
network-infra-utility (0.4.0)
|
|
56
|
+
nio4r (2.7.5)
|
|
57
|
+
puma (6.6.1)
|
|
58
|
+
rack (3.2.6)
|
|
59
|
+
rackup (2.3.1)
|
|
60
|
+
rake (13.3.1)
|
|
61
|
+
roda (3.105.0)
|
|
62
|
+
rspec (3.13.2)
|
|
63
|
+
rspec-core (3.13.6)
|
|
64
|
+
rspec-expectations (3.13.5)
|
|
65
|
+
rspec-mocks (3.13.8)
|
|
66
|
+
rspec-support (3.13.7)
|
|
67
|
+
thor (1.5.0)
|
|
68
|
+
|
|
69
|
+
BUNDLED WITH
|
|
70
|
+
4.0.10
|