SSD Nodes Learn Hosting plans →
Mwongozo Matt ConnorNa Matt Connor · Imeboreshwa 2026-08-31

Jinsi ya kuweka SSH kupitia Tor onion service

Jifunze kuweka sshd nyuma ya Tor onion service ili VPS yako isikubali muunganisho wowote wa ndani. Pata mwongozo wa v3 client authorization na hatua sahihi za kuepuka kujifungia.

Mabadiliko yanayotokana na SSH kupitia Tor onion service

SSH kupitia Tor onion service inakuwezesha kusimamia VPS ambayo haikubali muunganisho wowote wa ndani kwenye port yoyote. Seva hupiga simu kuelekea mtandao wa Tor na kuweka muunganisho huo ukiwa wazi. Kikao chako cha SSH hufika kupitia njia hiyo, kwa hivyo hakuna kinachopaswa kusikiliza kwenye anwani ya IP ya umma.

Athari kwenye logi huonekana mara moja. Mashine yenye port ya SSH ya umma hukusanya maelfu ya majaribio yaliyoshindwa ya nenosiri kila siku kutoka kwa skana. Hamisha sshd nyuma ya onion service na ufunge trafiki ya ndani kwenye firewall, na /var/log/auth.log itarekodi tu vikao ulivyoanzisha wewe mwenyewe.

Gharama yake ni kwamba tor hukaa kwenye njia ya kila kikao cha msimamizi. Ni daemon ya userspace ambayo lazima ianze na kujipakia baada ya kila reboot kabla hujaweza kuingia. Panga hilo kabla ya kufunga port, kwa sababu hali ya hitilafu hapa ni kupoteza ufikiaji wa mashine ambayo huwezi kuifikia kimwili.

Pata njia ya kurudi kabla ya kugusa chochote

Usianze hadi uwe na njia ya kurejesha mfumo ambayo haitumii SSH.

Fungua console ya mtoa huduma wako sasa, iwe ni VNC au serial console katika control panel, na uingie ndani. Ikiwa password ya root haijulikani, weka upya password ya root kutoka kwenye panel kwanza na uhakikishe inafanya kazi. Console ambayo hujawahi kuijaribu si njia ya kurejesha mfumo.

Utaratibu ufuatao ni muhimu. Kila hatua inathibitishwa kabla ya inayofuata, na port 22 inabaki wazi hadi njia ya onion ifanye kazi.

  1. Sakinisha tor na uhakikishe inafanya bootstrap.
  2. Define onion service na usome anwani yake.
  3. Unganisha kupitia onion wakati port 22 bado iko wazi.
  4. Ongeza client authorisation, kisha unganisha tena.
  5. Bind sshd kwenye loopback na ufunge port 22.
  6. Reboot, kisha unganisha kupitia onion tena.

Weka session yako ya sasa ya SSH ikiwa wazi muda wote. Session iliyoanzishwa inaweza kuendelea hata baada ya mabadiliko ya firewall ambayo yangezuia session mpya, kwa hivyo ndiyo njia yako ya kwanza ya uokoaji.

Sakinisha tor kwenye seva

Ubuntu inatoa tor katika hazina (repository) yake yenyewe na toleo hilo mara nyingi huwa limepitwa na wakati. Hazina ya The Tor Project ina toleo linaloelezwa katika nyaraka zao. Iongeze kwa kutumia amri kutoka kwenye mwongozo wao wa apt repository.

sudo apt update
sudo apt install -y apt-transport-https wget gpg
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null

Andika /etc/apt/sources.list.d/tor.sources. Suites inachukua jina la codename ya toleo lako, ambalo lsb_release -cs huchapisha (noble kwenye Ubuntu 24.04).

Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring
sudo journalctl -u tor@default -n 20 --no-pager

Log inapaswa kuishia na Bootstrapped 100% (done). Kukwama chini ya hapo inamaanisha tor haiwezi kufikia mtandao, jambo ambalo karibu kila mara husababishwa na sheria ya firewall ya kutoka nje au saa iliyopitwa na wakati vibaya.

Jina la unit ni mtego. systemctl status tor huripoti Active: active (exited) hata wakati kila kitu kiko sawa, kwa sababu Debian na Ubuntu hupakia tor kama unit kuu ya multi-instance ambayo kazi yake pekee ni kuleta instance halisi. Daemon yenyewe huendeshwa kama tor@default.service. Tumia jina hilo kwa status na kwa journalctl. Amri za start, stop na reload za tor bado hufikia instance hiyo, kwa hivyo sudo systemctl reload tor hufanya kazi kama unavyotarajia.

Fafanua huduma ya onion kwa port 22

Ongeza mistari miwili kwenye /etc/tor/torrc.

HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22 127.0.0.1:22

Mstari wa pili unaiambia tor ikubali virtual port 22 kwenye anwani ya onion na kuunganisha kwenye 127.0.0.1:22 iliyo kwenye seva. Tor hufikia sshd kupitia loopback, na ndiyo sababu sshd inaweza baadaye kuacha kusikiliza kwenye anwani ya umma. Elekeza mstari huo wa pili kwenye seva ya wavuti iliyo kwenye 127.0.0.1:80 badala yake, na maelekezo hayo mawili yatafanya kazi sawa na kuchapisha tovuti kwenye anwani ya onion, ambayo ni huduma ya pili muhimu ya kuendesha mara tu tor itakapokuwa imesakinishwa.

sudo systemctl reload tor
sudo cat /var/lib/tor/ssh/hostname

Hiyo huchapisha herufi 56 za base32 ikifuatiwa na .onion. Herufi hizo ni ufunguo wa umma (public key) wa huduma hiyo katika mfumo uliosimbwa. Hakuna mamlaka ya kutoa vyeti (certificate authority) wala usajili wa majina popote katika mchakato huu.

Iache tor itengeneze /var/lib/tor/ssh/ yenyewe. Ukiitengeneza kwa mkono ukiwa na mmiliki asiye sahihi au mode iliyo wazi zaidi ya 0700, tor itakataa kuitumia, na journal itaripoti kuwa saraka hiyo ina ruhusa nyingi mno. Faili zilizomo ndani ndizo utambulisho wa huduma: hs_ed25519_secret_key ndiyo anwani yenyewe. Hifadhi nakala ya saraka hiyo kwa mode 600 na uweke nakala hiyo nje ya seva, kwa sababu kuipoteza kunamaanisha kupata anwani mpya na kuhariri usanidi kwenye kila mteja.

Unganisha kutoka kwa workstation yako

Workstation yako inahitaji mteja wa tor, ambayo haihitaji usanidi wowote. Kwenye Debian au Ubuntu hiyo ni sudo apt install -y tor netcat-openbsd. Tor kisha husikiliza kwenye 127.0.0.1:9050 kama SOCKS5 proxy. SOCKS ni itifaki ya kawaida ya proxy, na toleo la 5 linaweza kubeba hostname badala ya anwani ya IP, ambayo ndiyo sehemu muhimu hapa.

OpenSSH haina mteja wake wa SOCKS, kwa hivyo programu msaidizi hutengeneza muunganisho. Ongeza hii kwenye ~/.ssh/config.

Host myvps
  HostName xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion
  User admin
  ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:9050 %h %p
  ServerAliveInterval 30

-X 5 huchagua SOCKS5 na -x 127.0.0.1:9050 inaelekeza kwenye tor ya ndani. %h hupitisha jina la onion kwa tor kama jina, ili tor ilitatue ndani ya mtandao. Hii lazima iwe OpenBSD netcat. GNU netcat haina chaguo la -X na husimama na nc: invalid option -- 'X'.

ssh myvps

Muunganisho wa kwanza ni wa polepole, kwa sababu tor hujenga mzunguko kabla ya kitu kingine chochote kutokea. Kubali fingerprint ya host key kama ungefanya mahali pengine popote. Kuanzia hapa, ushughulikiaji wa kawaida wa SSH key unatumika bila mabadiliko. Usafirishaji umehamishwa. Uthibitishaji haukuhama.

Kwa matumizi ya mara moja unaweza kuruka ingizo la usanidi: torsocks ssh admin@xxxxx.onion hufanya kazi hiyo hiyo.

Ongeza idhini ya mteja ya v3

Kama ilivyo sasa, mtu yeyote anayegundua anwani anaweza kufikia SSH banner yako na kuanza kukisia. Anwani za Onion haziwezi kuorodheshwa kutoka kwenye mfumo wa saraka, kwa hivyo anwani hufanya kazi kama siri, lakini huvuja kwa njia za kawaida: historia ya shell, na faili za usanidi zilizowekwa kwenye git repository. Idhini ya mteja (client authorisation) huziba mwanya huo. Huduma huchapisha descriptor yake ikiwa imesimbwa kwa ufunguo wa mteja, kwa hivyo mtu aliye na anwani lakini hana ufunguo hawezi hata kupata huduma hiyo.

Tengeneza jozi ya funguo ya x25519 kwenye mteja. Hii ni njia kutoka kwenye mwongozo wa idhini ya mteja wa Tor Project, ikiwa na mabadiliko moja.

openssl genpkey -algorithm x25519 -out /tmp/k1.prv.pem
grep -v " PRIVATE KEY" /tmp/k1.prv.pem | base64 -d | tail --bytes=32 | base32 | sed 's/=//g' > /tmp/k1.prv.key
openssl pkey -in /tmp/k1.prv.pem -pubout | grep -v " PUBLIC KEY" | base64 -d | tail --bytes=32 | base32 | sed 's/=//g' > /tmp/k1.pub.key

Toleo lililochapishwa la mistari hiyo hutumia base64pem -d, ambayo usakinishaji wa kawaida wa Ubuntu hauna. Amri hiyo husimama na kutoa base64pem: command not found. GNU base64 -d husoma mwili uleule wa PEM, kwa hivyo itumie badala yake.

Kwenye seva, sakinisha ufunguo wa umma (public key).

sudo install -d -m 700 -o debian-tor -g debian-tor /var/lib/tor/ssh/authorized_clients
echo "descriptor:x25519:PASTE_PUBLIC_KEY_HERE" | sudo tee /var/lib/tor/ssh/authorized_clients/laptop.auth >/dev/null
sudo chown debian-tor:debian-tor /var/lib/tor/ssh/authorized_clients/laptop.auth
sudo systemctl reload tor

Faili zinazoishia na .auth pekee ndizo zinazosomwa. Ukihifadhi kama laptop.auth.txt, tor itapuuza faili hiyo bila kutoa ujumbe wa hitilafu, na huduma itabaki wazi kwa mtu yeyote aliye na anwani hiyo.

Kwenye mteja, sakinisha ufunguo wa faragha (private key). Kwenye Ubuntu, tor daemon huendeshwa kama mtumiaji debian-tor na haiwezi kusoma faili katika saraka yako ya nyumbani (home directory), kwa hivyo weka saraka hiyo mahali ambapo mtumiaji huyo anaweza kufikia.

sudo install -d -m 700 -o debian-tor -g debian-tor /var/lib/tor/onion_auth
echo "ADDRESS_WITHOUT_DOT_ONION:descriptor:x25519:PASTE_PRIVATE_KEY_HERE" | sudo tee /var/lib/tor/onion_auth/myvps.auth_private >/dev/null
sudo chown debian-tor:debian-tor /var/lib/tor/onion_auth/myvps.auth_private
sudo chmod 600 /var/lib/tor/onion_auth/myvps.auth_private

Ongeza ClientOnionAuthDir /var/lib/tor/onion_auth kwenye /etc/tor/torrc ya mteja na uanzishe upya tor. Ikiwa unaendesha tor kama mtumiaji wako mwenyewe, kwa mfano toleo la Homebrew kwenye macOS, elekeza ClientOnionAuthDir kwenye ~/.tor/onion_auth ukiwa na mode 0700.

Anwani iliyo ndani ya faili hiyo ni herufi 56 bila kiambishi cha .onion. Futa /tmp/k1.prv.pem na /tmp/k1.prv.key ukimaliza.

Sasa jaribu pande zote mbili. ssh myvps inapaswa kuendelea kuunganisha. Kutoka kwa mashine isiyo na ufunguo, anwani hiyo hiyo inapaswa kushindwa kuunganisha. Kushindwa huko ndiko uthibitisho wako kwamba idhini imewashwa.

Funga port 22, kwa mpangilio huu

Weka wavu wa usalama kwanza. Amri hii moja itatengua mabadiliko yote mawili hapa chini baada ya dakika kumi na tano ikiwa utajifungia nje.

sudo systemd-run --on-active=15m --unit=ssh-rescue \
  /bin/sh -c 'ufw allow 22/tcp; rm -f /etc/systemd/system/ssh.socket.d/override.conf; systemctl daemon-reload; systemctl restart ssh.socket'

Ighairi kwa sudo systemctl stop ssh-rescue.timer pindi utakapothibitisha kuwa njia ya onion bado inafanya kazi.

Baada ya hapo, zuia sshd isisikilize kwenye anwani ya umma. Ubuntu 24.04 huwasha ssh kupitia socket unit, kwa hivyo ListenAddress katika sshd_config hupuuzwa: ssh.socket ndiyo inayomiliki socket ya kusikiliza, si sshd. Hakikisha uko katika hali ipi.

systemctl is-enabled ssh.socket

Ikiwa hiyo itachapisha enabled, endesha sudo systemctl edit ssh.socket na uongeze hili.

[Socket]
ListenStream=
ListenStream=127.0.0.1:22

Sehemu tupu ya ListenStream= hufuta thamani iliyorithiwa kutoka kwa unit iliyopakiwa. Usipoandika mstari huo, utaongeza msikilizaji wa pili huku ukibakiza ule wa umma, ambayo ndiyo njia ya kawaida hatua hii inavyoshindwa bila kutoa taarifa.

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
ss -tlnp | grep ':22'

ss inapaswa kuonyesha 127.0.0.1:22 na isiwe na kitu kwenye 0.0.0.0:22. Ikiwa ssh.socket ilikuwa imezimwa, weka ListenAddress 127.0.0.1 katika /etc/ssh/sshd_config.d/10-onion.conf, endesha sudo systemctl restart ssh, kisha kagua kwa kutumia mstari uleule wa ss. Matokeo hayo ndiyo uthibitisho katika hali zote mbili.

Kisha firewall, ambayo ni ya kawaida usimamizi wa sheria za ufw kwenye VPS. Endesha sudo ufw status numbered kwanza na ufute sheria yoyote ya SSH inayoorodheshwa.

sudo ufw status numbered
sudo ufw delete allow OpenSSH
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw status verbose

Acha trafiki inayotoka iruhusiwe. Tor huunganisha nje kwenye relays kupitia port kama 443 na 9001, kwa hivyo sera ya default-deny ya trafiki inayotoka itazuia tor kuanza (bootstrapping) na kuondoa njia yako pekee ya kuingia wakati huo huo. Watoa huduma wengi pia huendesha firewall tofauti ya mtandao kwenye control panel. Funga 22 huko pia, vinginevyo port hiyo itaendelea kufikika bila kujali kile ufw inachoripoti.

Ikiwa Docker inaendeshwa kwenye seva hii, kagua port zake zilizochapishwa kabla ya kusema kazi imekamilika. Docker huandika sheria zake kwenye table zilezile na huchapisha port za container moja kwa moja kupita ufw, kwa hivyo sera ya ufw deny si picha kamili ya usalama.

Fanya reboot kabla ya kuiamini

systemctl is-enabled tor@default
sudo reboot

Ikiwa amri ya kwanza haionyeshi kuwa huduma imewezeshwa, endesha sudo systemctl enable tor@default kabla ya kufanya reboot. Subiri dakika mbili, kisha ssh myvps. Tor inahitaji kufanya bootstrap baada ya boot, kwa hivyo anwani ya onion huanza kujibu muda fulani baada ya mashine yenyewe kuwaka.

Ikiwa hairejei, fungua console na usome sudo journalctl -u tor@default -b. Hitilafu ya sintaksia katika torrc au tatizo la ruhusa ya saraka huchapishwa hapo. Unaweza pia kukagua marekebisho ya torrc kabla ya kuyatumia.

sudo -u debian-tor tor --verify-config

Gharama ya huduma hii ikilinganishwa na WireGuard tunnel

Ikilinganishwa na WireGuard VPN kwenye VPS yako mwenyewe, onion service ni polepole na haina utabiri mzuri. Kuwa mkweli kwako mwenyewe kuhusu tofauti hizi kabla ya kuamua kuitumia.

Latency. Mzunguko wa mteja unahusisha relay tatu na upande wa huduma unaongeza nyingine tatu, kwa hivyo mibofyo yako ya kibodi hupitia takriban mashine sita zilizochaguliwa bila mpangilio duniani kote. Uandishi wa moja kwa moja una ucheleweshaji unaoonekana, na nakala za faili ni polepole. WireGuard huongeza hop moja tu. Pima hali yako mwenyewe kwa kutumia time ssh myvps 'echo ok', kwa sababu takwimu hutegemea mzunguko ambao tor imejenga na hubadilika wakati tor inapojenga mzunguko mwingine.

Daemon ya userspace katika njia kuu. WireGuard iko kwenye kernel na huwaka pamoja na mtandao. Tor ni mchakato ambao lazima uanze, ujipakie (bootstrap), na ufikie guard relay kabla ya kitu chochote kufanya kazi. Inaposhindwa, utalazimika kutumia console ya mtoa huduma.

Usahihi wa saa. Onion service descriptors huchapishwa kulingana na vipindi vya muda, kwa hivyo saa isiyo sahihi itavuruga utafutaji wa anwani bila ujumbe wowote wazi. timedatectl inapaswa kuripoti System clock synchronized: yes.

Unachopata ni usalama ambao hautegemei tena sheria ya firewall kuwa sahihi. Hakuna port ya kuchanganua (scan) na hakuna banner ya kunasa, na anwani yenyewe ni public key, kwa hivyo endpoint inathibitisha utambulisho wake kabla ya SSH kuanza.

Jibu la kiutendaji kwa kawaida ni kutumia yote mawili. Endesha WireGuard kama njia ya kila siku, na uweke onion service kama njia mbadala inayofanya kazi wakati usanidi wa WireGuard hauko sahihi. Hii huacha port moja ya UDP ikiwa wazi badala ya port ya umma ya SSH. Hakuna kati ya haya kinachochukua nafasi ya kuimarisha sshd yenyewe: uthibitishaji wa key pekee na kuingia bila kutumia root bado ni muhimu, kwa sababu onion service hulinda njia ya mtandao pekee na si kitu kingine zaidi ya hapo.

Njia za kufeli na hitilafu utakazoziona

Tor haipiti kamwe Bootstrapped 0%. Trafiki ya nje imezuiwa, au saa iko mbali sana na wakati sahihi. Kagua sera ya kutoka na sudo ufw status verbose, kisha endesha timedatectl.

systemctl status tor inasema active (exited). Hilo ni jambo la kawaida kwenye Debian na Ubuntu. Soma tor@default badala yake.

Descriptor haipatikani. Tor inarejesha hitilafu ya SOCKS iliyopanuliwa F0, "Onion Service Descriptor Can Not be Found". Aidha descriptor haijachapishwa bado, jambo linalochukua muda mfupi baada ya reload, au tor kwenye seva haifanyi kazi.

F4, "Onion Service Missing Client Authorization". Mteja hana .auth_private inayolingana ambayo tor inaweza kuitumia. Hakikisha kuwa ClientOnionAuthDir ipo kwenye torrc, kwamba saraka ina mode 0700, kwamba jina la faili linaishia na .auth_private, na kwamba debian-tor inaweza kuisoma.

F5, "Onion Service Wrong Client Authorization". Private key hailingani na faili la .auth kwenye seva. = iliyopo mwishoni au mstari mpya usiohitajika ndani ya base32 string husababisha hili.

nc: invalid option -- 'X'. GNU netcat imewekwa badala ya ile ya OpenBSD. Endesha sudo apt install -y netcat-openbsd.

Could not resolve hostname. ssh ilijaribu DNS ya kawaida, ambayo haina jibu kwa .onion, kwa hivyo ProxyCommand haikuwahi kuendeshwa. Muundo wa Host ndani ya ~/.ssh/config haulingani na jina ulilochapa.

Permission denied (publickey). Tunnel ilifanya kazi na tor imemaliza. Ichukulie hii kama tatizo la kawaida la permission denied publickey na usiihusishe tor na hilo.

FAQ

Je, onion service inamaanisha kweli hakuna port zilizofunguliwa kwenye VPS yangu?

Ndiyo, pindi tu sshd inapofungwa kwenye 127.0.0.1 na firewall inapokataa trafiki ya kuingia. Tor huanzisha muunganisho wa TCP wa kutoka kwenda kwenye relay na kikao chako husafiri kurudi kupitia njia hiyo, kwa hivyo hakuna kitu kwenye seva kinachokubali muunganisho kwenye anwani ya umma. Thibitisha hili kwa ss -tlnp kwenye seva na ufanye port scan kutoka mahali pengine. Usisahau firewall ya mtandao ya mtoa huduma wako kwenye control panel, ambayo ni kidhibiti tofauti na ufw na lazima ifungwe pia.

Je, anwani ya .onion inatosha kama usalama pekee kwa SSH?

Hapana. Anwani hiyo ina herufi 56 na haiwezi kukisiwa au kuorodheshwa kutoka kwenye mfumo wa directory, kwa hivyo inafanya kazi kama siri, lakini inaweza kuvuja kupitia shell history na faili za configuration. Ongeza v3 client authorisation. Kwa kufanya hivyo, descriptor ya huduma husimbwa kwa kutumia ufunguo wako wa client, kwa hivyo mtu aliye na anwani pekee atapata error F4 na hatofika kwenye sshd hata kidogo.

Nini kinatokea ikiwa Tor itashindwa kuanza baada ya reboot?

Utapoteza uwezo wa kufikia SSH kabisa, kwa sababu anwani ya onion ndiyo njia pekee ya kuingia. Hiyo ndiyo sababu console ya mtoa huduma lazima ijaribiwe kabla ya kufunga port 22. Tor pia inahitaji muda wa kuanza (bootstrap) baada ya boot, kwa hivyo anwani hujibu baadaye kuliko mashine inavyojibu ping. Ikiwa haijibu kamwe, ingia kwenye console na usome sudo journalctl -u tor@default -b, ambapo kosa la syntax la torrc au tatizo la ruhusa kwenye /var/lib/tor/ssh huandikwa.

Je, SSH kupitia Tor ni polepole kuliko WireGuard?

Ndiyo, kwa kiasi kikubwa. Muunganisho wa onion service hupitia takriban relay sita zilizochaguliwa bila mpangilio, wakati WireGuard ni hop moja iliyosimbwa moja kwa moja kwenye seva yako. Kuandika huhisi kusuasua na uhamishaji wa data ni wa polepole. Usanidi wa kawaida ni kutumia WireGuard kwa kazi za kila siku huku onion service ikihifadhiwa kama njia ya dharura inayoweza kutumika ikiwa usanidi wa VPN utaharibika.