You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Tor地址连接Docker容器内SSH服务器的问题排查

解决Docker容器中Tor隐藏服务SSH无法连接的问题

问题背景

Dockerfile配置如下:

FROM kalilinux/kali-rolling

RUN apt clean

RUN apt update && apt install -y openssh-server tor

RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN echo "ListenAddress 127.0.0.1" >> /etc/ssh/sshd_config

# Configure Tor hidden service for SSH
RUN echo "HiddenServiceDir /var/lib/tor/ssh_hidden_service/" >> /etc/tor/torrc
RUN echo "HiddenServicePort 22 127.0.0.1:22" >> /etc/tor/torrc
RUN echo "HiddenServiceAuthorizeClient  stealth hidden_root" >> /etc/tor/torrc

RUN usermod -s /bin/bash root
RUN service ssh restart
RUN service tor restart

CMD ["/usr/sbin/sshd", "-D"]

出现的错误:

  • Tor日志:
Closed 1 streams for service [scrubbed].onion for reason resolve failed. Fetch status: No more HSDir available to query
  • torify连接错误:
1690991052 ERROR torsocks[7188]: Host unreachable (in socks5_recv_connect_reply() at socks5.c:539)
ssh: connect to host b6aytqwa2yohkehkokd6cj6i47dfd5dlra3p42nhw7jx7kawdfpjkyad.onion port 22: No route to host

修复步骤

1. 修复容器启动时服务启动逻辑

构建阶段执行的service ssh restart和service tor restart不会在容器启动时生效,容器启动时只有sshd -D在运行,Tor服务未启动。需要同时启动两个服务:

创建启动脚本entrypoint.sh:

#!/bin/bash
# 启动SSH服务
service ssh start
# 启动Tor服务
service tor start
# 保持容器前台运行,同时查看Tor日志
tail -f /var/log/tor/log

修改Dockerfile,添加脚本并设置为入口:

# ... 原有内容 ...

RUN usermod -s /bin/bash root

# 添加启动脚本
COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["entrypoint.sh"]

2. 确保Tor隐藏服务目录权限正确

Tor服务以debian-tor用户运行,需要给隐藏服务目录赋予正确权限:
在Dockerfile的Tor配置部分后添加:

RUN mkdir -p /var/lib/tor/ssh_hidden_service/
RUN chown -R debian-tor:debian-tor /var/lib/tor/ssh_hidden_service/

3. 验证.onion地址正确性

容器启动后,进入容器查看正确的隐藏服务地址:

docker exec -it <容器ID> cat /var/lib/tor/ssh_hidden_service/hostname

确保连接时使用的是该文件中的地址,而非旧的缓存地址。

4. 解决Tor HSDir查询失败问题

  • 确保Docker容器能正常访问外网(检查容器网络配置,比如使用默认的bridge网络,宿主机能联网)。
  • 若网络受限,可在torrc中添加网桥配置(可选):
RUN echo "UseBridges 1" >> /etc/tor/torrc
RUN echo "Bridge obfs4 <网桥地址>:<端口> <网桥指纹>" >> /etc/tor/torrc

5. 验证服务状态

容器启动后,检查服务运行状态:

# 检查SSH服务
docker exec -it <容器ID> service ssh status
# 检查Tor服务
docker exec -it <容器ID> service tor status

确保两个服务均处于active (running)状态。

内容的提问来源于stack exchange,提问作者jak bin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:52:23