要通过 SCP 使用 SOCKS5 代理,可以利用 SSH 的 ProxyCommand 选项,配合支持 SOCKS5 的工具(如 ncatconnect-proxy)。以下是具体步骤:

方法一:使用 ncat (来自 nmap 工具包)

  1. 安装 ncat

    • Debian/Ubuntu:sudo apt install nmap
    • macOS:brew install nmap
  2. 通过命令行直接使用

    scp -o "ProxyCommand=ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p" 本地文件 用户@远程主机:/目标路径
  3. 持久化配置(推荐): 编辑 ~/.ssh/config,添加:

    Host 别名
       HostName 远程主机地址
       User 用户名
       ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p

    之后使用 scp 本地文件 别名:/目标路径 即可。

方法二:使用 connect-proxy

  1. 安装 connect-proxy

    • Debian/Ubuntu:sudo apt install connect-proxy
  2. 命令行使用

    scp -o "ProxyCommand=connect -S 127.0.0.1:1080 %h %p" 本地文件 用户@远程主机:/目标路径

方法三:通过 proxychains 工具

  1. 安装 proxychains

    • Debian/Ubuntu:sudo apt install proxychains4
    • macOS:brew install proxychains-ng
  2. 配置代理: 编辑 /etc/proxychains.conf~/.proxychains/proxychains.conf,添加:

    socks5 127.0.0.1 1080
  3. 执行 SCP

    proxychains4 scp 本地文件 用户@远程主机:/目标路径

参数说明

  • 127.0.0.1:1080:替换为你的 SOCKS5 代理地址和端口。
  • 若代理需要认证,在 ncat 中使用 --proxy-auth 用户名:密码,或在 connect 中使用 -S user:pass@host:port

验证连接

执行前可先用 SSH 测试:

ssh -o "ProxyCommand=ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p" 用户@远程主机

确保 SSH 能通过代理连接后,SCP 即可正常工作。

示例

# 使用 ncat 临时代理
scp -o "ProxyCommand=ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p" ~/file.txt [email protected]:/home/user/

# 使用持久化配置
echo -e "Host example\n    HostName example.com\n    User user\n    ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p" >> ~/.ssh/config
scp ~/file.txt example:/home/user/

通过以上方法,SCP 将经由 SOCKS5 代理传输文件。