通过 mac 略过跳板机向宿主机传输文件

3 阅读3分钟

⏺ # 通过跳板机向内网宿主机传输文件

环境说明

  • Mac 机器:本地开发机
  • 跳板机:125.94.43.42:2222(堡垒机,禁用 SCP 上传和端口转发)
  • 内网宿主机:10.34.251.22 (xs4773)
  • 网络拓扑:Mac 可以通过跳板机 SSH 到内网机器,但无法直接 SCP 传输

失败的方案

以下方案因跳板机安全限制而失败:

  1. scp -J ProxyJump 直传 - 跳板机禁用端口转发
  2. ❌ 两步传输(先传到跳板机再转发)- 跳板机禁止文件上传
  3. ❌ SSH 管道传输 - 内网机器要求公钥认证

成功方案:HTTP 服务器直传

前提条件:Mac 和内网宿主机在同一大网络(能互相访问,如通过 VPN)

步骤 1:获取 Mac 的 IP 地址

# 在 Mac 上执行
ifconfig | grep "inet " | grep -v 127.0.0.1
# 输出示例:inet 100.100.32.216

记录 Mac 的 IP 地址(如 100.100.32.216)

步骤 2:在 Mac 上启动 HTTP 文件服务器

# 方案 A:从 Downloads 目录提供文件
cd ~/Downloads
python3 -m http.server 8000

# 方案 B:从特定目录提供文件(如二进制文件目录)
cd /path/to/your/files
python3 -m http.server 8001

注意:保持终端运行,不要关闭

步骤 3:在内网宿主机上下载

# SSH 到内网宿主机
ssh -p 2222 -J tianyukun@tianyukun@10.56.35.38@125.94.43.42 root@10.34.251.22

# 下载文件(替换 <Mac-IP> 和端口号)
wget http://<Mac-IP>:8000/filename -O /destination/path

实际使用示例

示例 1:下载 Go 安装包

# Mac 上
cd ~/Downloads
python3 -m http.server 8000

# xs4773 上
wget http://100.100.32.216:8000/go1.25.5.linux-amd64.tar.gz -O /tmp/go1.25.5.linux-amd64.tar.gz

示例 2:下载自定义二进制文件

# Mac 上
cd /Users/tyk/kubevirt-metadata/bin
python3 -m http.server 8001

# xs4773 上
wget http://100.100.32.216:8001/kubevirt-metadata-linux -O /root/kubevirt-metadata-linux
chmod +x /root/kubevirt-metadata-linux

安装 Go 的完整流程

# 1. 在 Mac 上启动 HTTP 服务器
cd ~/Downloads
python3 -m http.server 8000

# 2. SSH 到内网宿主机
ssh -p 2222 -J tianyukun@tianyukun@10.56.35.38@125.94.43.42 root@10.34.251.22

# 3. 下载 Go
wget http://100.100.32.216:8000/go1.25.5.linux-amd64.tar.gz -O /tmp/go1.25.5.linux-amd64.tar.gz

# 4. 安装 Go
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf /tmp/go1.25.5.linux-amd64.tar.gz

# 5. 配置环境变量
cat >> ~/.bashrc << 'EOF'
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
EOF

# 6. 使配置生效
source ~/.bashrc

# 7. 验证安装
go version

# 8. 清理安装包
rm /tmp/go1.25.5.linux-amd64.tar.gz

注意事项

1. 端口占用:如果 8000 端口被占用,可以换成其他端口(如 8001, 8080 等)
2. 防火墙:确保 Mac 的防火墙允许入站连接,或临时关闭防火墙
3. 网络连通性:Mac 和内网机器必须能互相访问(通常通过公司 VPN)
4. 文件路径:HTTP 服务器只能访问启动目录及其子目录的文件
5. 安全性:传输完成后记得关闭 HTTP 服务器(Ctrl+C)

备用方案(如果 HTTP 不通)

Base64 编码通过 SSH 传输(不推荐,速度慢)

# 在 Mac 上执行(需要内网机器允许从跳板机 SSH)
cat /path/to/file | base64 | \
  ssh -p 2222 tianyukun@tianyukun@10.56.35.38@125.94.43.42 \
  "ssh root@10.34.251.22 'base64 -d > /destination/path'"

快速参考

# 获取 Mac IP
ifconfig | grep "inet " | grep -v 127.0.0.1

# 启动 HTTP 服务器
cd /path/to/files && python3 -m http.server 8000

# 下载文件
wget http://<Mac-IP>:8000/<filename> -O /destination/path