SSD Nodes Learn 🎉 VPS dari $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-13

Cara akses SSH melalui Tor onion tanpa buka port VPS

Ketahui cara menyembunyikan SSH di sebalik perkhidmatan onion Tor untuk menutup semua port masuk. Panduan ini merangkumi konfigurasi v3, kebenaran klien dan langkah elak lockout.

Perubahan SSH melalui perkhidmatan onion Tor

SSH melalui perkhidmatan onion Tor membolehkan anda mentadbir VPS yang tidak menerima sebarang sambungan masuk pada mana-mana port. Pelayan membuat panggilan keluar ke rangkaian Tor dan memastikan sambungan tersebut kekal terbuka. Sesi SSH anda sampai melalui sambungan tersebut, jadi tiada apa-apa yang perlu mendengar pada alamat IP awam.

Kesan terhadap log adalah serta-merta. Sebuah mesin dengan port SSH awam mengumpul ribuan percubaan kata laluan yang gagal setiap hari daripada pengimbas. Alihkan sshd ke belakang perkhidmatan onion dan gugurkan trafik masuk pada firewall, dan /var/log/auth.log kemudiannya hanya merekodkan sesi yang anda mulakan.

Kosnya ialah tor berada dalam laluan setiap sesi pentadbir. Ia merupakan daemon ruang pengguna yang perlu bermula dan melakukan bootstrap selepas setiap reboot sebelum anda boleh log masuk. Rancang perkara itu sebelum anda menutup port, kerana mod kegagalan di sini ialah kehilangan akses kepada mesin yang tidak boleh anda capai secara fizikal.

Dapatkan akses masuk semula sebelum anda mengubah apa-apa

Jangan bermula sehingga anda mempunyai laluan pemulihan yang tidak menggunakan SSH.

Buka konsol pembekal anda sekarang, sama ada VNC atau konsol bersiri dalam panel kawalan, dan log masuk melaluinya. Jika kata laluan root tidak diketahui, tetapkan semula kata laluan root daripada panel terlebih dahulu dan sahkan ia berfungsi. Konsol yang tidak pernah anda uji bukanlah laluan pemulihan.

Urutan di bawah adalah penting. Setiap langkah dibuktikan sebelum langkah seterusnya dijalankan, dan port 22 kekal terbuka sehingga laluan onion berfungsi.

  1. Pasang tor dan sahkan ia melakukan bootstrap.
  2. Tentukan perkhidmatan onion dan baca alamatnya.
  3. Sambung melalui onion semasa port 22 masih terbuka.
  4. Tambah kebenaran klien, kemudian sambung semula.
  5. Ikat sshd kepada loopback dan tutup port 22.
  6. But semula, kemudian sambung melalui onion sekali lagi.

Pastikan sesi SSH semasa anda sentiasa terbuka sepanjang proses ini. Sesi yang telah diwujudkan akan bertahan walaupun terdapat perubahan firewall yang mungkin menyekat sesi baharu, jadi ia adalah barisan penyelamat pertama anda.

Memasang tor pada pelayan

Ubuntu menyertakan tor dalam repositori sendiri dan binaan tersebut sering kali ketinggalan. Repositori Tor Project mengandungi versi yang diterangkan dalam dokumentasi mereka. Tambah repositori tersebut menggunakan arahan daripada panduan repositori apt mereka.

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

Tulis /etc/apt/sources.list.d/tor.sources. Suites mengambil kod nama keluaran anda, yang dicetak oleh lsb_release -cs (noble pada 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 sepatutnya berakhir dengan Bootstrapped 100% (done). Jika tersekat di bawah baris tersebut, ini bermakna tor tidak dapat mencapai rangkaian, yang hampir selalu disebabkan oleh peraturan firewall keluar atau tetapan jam yang salah.

Nama unit ini mengelirukan. systemctl status tor melaporkan Active: active (exited) walaupun semuanya berjalan lancar, kerana Debian dan Ubuntu membungkus tor sebagai unit induk berbilang tika (multi-instance) yang tugasnya hanya untuk memanggil tika sebenar. Daemon itu sendiri berjalan sebagai tor@default.service. Gunakan nama tersebut untuk status dan untuk journalctl. Arahan start, stop dan reload pada tor masih mencapai tika tersebut, jadi sudo systemctl reload tor berfungsi seperti yang anda jangkakan.

Takrifkan onion service untuk port 22

Tambahkan dua baris ke dalam /etc/tor/torrc.

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

Baris kedua memberitahu tor untuk menerima virtual port 22 pada alamat onion dan menyambung ke 127.0.0.1:22 pada kotak tersebut. Tor mencapai sshd melalui loopback, itulah sebabnya sshd boleh berhenti mendengar pada alamat awam kemudiannya.

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

Perintah itu mencetak 56 aksara base32 diikuti oleh .onion. Aksara-aksara tersebut adalah kunci awam perkhidmatan dalam bentuk berkod. Tiada pihak berkuasa sijil dan tiada pendaftaran nama dalam proses ini.

Biarkan tor mencipta /var/lib/tor/ssh/ sendiri. Jika anda membuatnya secara manual dengan pemilik yang salah atau mod yang lebih longgar daripada 0700, tor akan enggan menggunakannya, dan jurnal akan melaporkan direktori tersebut sebagai terlalu permisif. Fail-fail di dalamnya adalah identiti perkhidmatan: hs_ed25519_secret_key ialah alamat tersebut. Sandarkan direktori itu dengan mod 600 dan simpan salinannya di luar kotak, kerana kehilangannya bermakna alamat baharu dan penyuntingan konfigurasi pada setiap klien.

Menyambung dari stesen kerja anda

Stesen kerja anda memerlukan klien Tor, yang tidak memerlukan sebarang konfigurasi. Pada Debian atau Ubuntu, ia adalah sudo apt install -y tor netcat-openbsd. Tor kemudiannya mendengar pada 127.0.0.1:9050 sebagai proksi SOCKS5. SOCKS ialah protokol proksi generik, dan versi 5 boleh membawa nama hos dan bukannya alamat IP, yang merupakan bahagian penting di sini.

OpenSSH tidak mempunyai klien SOCKS sendiri, jadi program pembantu digunakan untuk membuat sambungan. Tambahkan ini ke dalam ~/.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 memilih SOCKS5 dan -x 127.0.0.1:9050 menghala ke Tor tempatan. %h menyerahkan nama onion kepada Tor sebagai nama, supaya Tor menyelesaikannya di dalam rangkaian. Ini mestilah OpenBSD netcat. GNU netcat tidak mempunyai pilihan -X dan akan terhenti dengan nc: invalid option -- 'X'.

ssh myvps

Sambungan pertama adalah perlahan, kerana Tor membina litar sebelum perkara lain berlaku. Terima cap jari kunci hos seperti yang anda lakukan di mana-mana tempat lain. Mulai sekarang, pengendalian kunci SSH seperti biasa terpakai tanpa perubahan. Pengangkutan telah berpindah. Pengesahan tidak.

Untuk kegunaan sekali sahaja, anda boleh melangkau entri konfigurasi: torsocks ssh admin@xxxxx.onion melakukan tugas yang sama.

Menambah kebenaran klien v3

Pada masa ini, sesiapa sahaja yang mengetahui alamat tersebut boleh mencapai banner SSH anda dan mula meneka. Alamat Onion tidak boleh disenaraikan daripada sistem direktori, jadi alamat tersebut bertindak seperti rahsia, namun ia boleh bocor melalui cara biasa: sejarah shell dan fail konfigurasi yang dimasukkan ke dalam repositori git. Kebenaran klien (client authorisation) menutup jurang tersebut. Servis menerbitkan deskriptornya dalam bentuk yang disulitkan kepada kunci klien, jadi seseorang yang mempunyai alamat tetapi tiada kunci tidak dapat mencari servis tersebut.

Jana pasangan kunci x25519 pada klien. Ini adalah saluran paip daripada panduan kebenaran klien Tor Project, dengan satu perubahan.

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

Versi yang diterbitkan bagi baris tersebut menggunakan base64pem -d, yang tidak disertakan dalam pemasangan standard Ubuntu. Perintah tersebut kemudian akan terhenti dengan base64pem: command not found. GNU base64 -d menyahkod badan PEM yang sama, jadi gunakannya sebagai ganti.

Pada pelayan, pasang kunci awam.

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

Hanya fail yang berakhir dengan .auth akan dibaca. Simpan ia sebagai laptop.auth.txt dan tor akan mengabaikan fail tersebut tanpa mencetak ralat, dan servis akan kekal terbuka kepada sesiapa sahaja yang mempunyai alamat tersebut.

Pada klien, pasang kunci peribadi. Pada Ubuntu, daemon tor berjalan sebagai pengguna debian-tor dan tidak boleh membaca fail dalam direktori rumah anda, jadi simpan direktori tersebut di lokasi yang boleh dicapai oleh pengguna itu.

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

Tambah ClientOnionAuthDir /var/lib/tor/onion_auth ke dalam /etc/tor/torrc klien dan muat semula tor. Jika anda menjalankan tor sebagai pengguna anda sendiri, contohnya binaan Homebrew pada macOS, halakan ClientOnionAuthDir ke ~/.tor/onion_auth dengan mod 0700.

Alamat di dalam fail tersebut ialah 56 aksara tanpa akhiran .onion. Padam /tmp/k1.prv.pem dan /tmp/k1.prv.key apabila anda selesai.

Sekarang uji kedua-dua arah. ssh myvps sepatutnya masih boleh bersambung. Daripada mesin yang tidak mempunyai kunci, alamat yang sama sepatutnya gagal. Kegagalan itu adalah bukti anda bahawa kebenaran tersebut telah aktif.

Tutup port 22, mengikut urutan ini

Tetapkan jaring keselamatan terlebih dahulu. Satu arahan ini akan membatalkan kedua-dua perubahan di bawah selepas lima belas minit jika anda terkunci keluar.

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'

Batalkannya dengan sudo systemctl stop ssh-rescue.timer sebaik sahaja anda mengesahkan laluan onion masih berfungsi.

Seterusnya, hentikan sshd daripada mendengar pada alamat awam. Ubuntu 24.04 mengaktifkan ssh melalui unit soket, jadi ListenAddress dalam sshd_config diabaikan: ssh.socket yang memiliki soket pendengar, bukan sshd. Semak keadaan anda sekarang.

systemctl is-enabled ssh.socket

Jika ia memaparkan enabled, jalankan sudo systemctl edit ssh.socket dan tambah baris ini.

[Socket]
ListenStream=
ListenStream=127.0.0.1:22

ListenStream= yang kosong akan mengosongkan nilai yang diwarisi daripada unit pakej. Jangan tinggalkan baris itu kerana anda akan menambah pendengar kedua sambil mengekalkan yang awam, yang merupakan cara paling biasa langkah ini gagal tanpa disedari.

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

ss sepatutnya menunjukkan 127.0.0.1:22 dan tiada apa-apa pada 0.0.0.0:22. Jika ssh.socket dinyahdayakan, letakkan ListenAddress 127.0.0.1 dalam /etc/ssh/sshd_config.d/10-onion.conf, jalankan sudo systemctl restart ssh, kemudian semak dengan baris ss yang sama. Output tersebut adalah bukti dalam kedua-dua keadaan.

Kemudian firewall, yang merupakan pengurusan peraturan ufw pada VPS biasa. Jalankan sudo ufw status numbered dahulu dan padamkan mana-mana peraturan SSH yang disenaraikan.

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

Benarkan trafik keluar. Tor bersambung keluar ke relay pada port seperti 443 dan 9001, jadi polisi default-deny untuk trafik keluar akan menghentikan proses bootstrapping tor dan menghapuskan satu-satunya cara anda untuk masuk pada masa yang sama. Kebanyakan penyedia juga menjalankan firewall rangkaian berasingan dalam panel kawalan. Tutup port 22 di sana juga, atau port tersebut akan kekal boleh dicapai walau apa pun yang dilaporkan oleh ufw.

Jika Docker berjalan pada mesin ini, semak port yang diterbitkan sebelum anda menganggap tugas selesai. Docker menulis peraturannya sendiri ke dalam jadual yang sama dan menerbitkan port kontena terus melepasi ufw, jadi polisi deny ufw bukanlah gambaran keseluruhan yang lengkap.

But semula sebelum anda mempercayainya

systemctl is-enabled tor@default
sudo reboot

Jika arahan pertama tidak melaporkan servis sebagai enabled, jalankan sudo systemctl enable tor@default sebelum anda melakukan but semula. Tunggu selama dua minit, kemudian ssh myvps. Tor perlu melakukan bootstrap selepas but, jadi alamat onion hanya akan mula menjawab beberapa ketika selepas mesin itu sendiri aktif.

Jika ia tidak kembali aktif, buka konsol dan baca sudo journalctl -u tor@default -b. Ralat sintaks torrc atau masalah kebenaran direktori akan dipaparkan di situ. Anda juga boleh menyemak suntingan torrc sebelum menggunakannya.

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

Kos ini berbanding terowong WireGuard

Berbanding dengan VPN WireGuard pada VPS anda sendiri, onion service adalah lebih perlahan dan kurang boleh dijangka. Bersikap jujurlah dengan diri sendiri mengenai pertukaran ini sebelum anda melaksanakannya.

Latensi. Litar klien terdiri daripada tiga relay dan bahagian servis menambah tiga lagi, jadi input papan kekunci anda merentasi kira-kira enam mesin yang dipilih secara rawak di seluruh dunia. Menaip secara interaktif mempunyai sela masa yang ketara, dan penyalinan fail adalah perlahan. WireGuard hanya menambah satu hop. Ukur kes anda sendiri dengan time ssh myvps 'echo ok', kerana angka tersebut bergantung pada litar yang dibina oleh tor dan ia berubah apabila tor membina litar baharu.

Daemon ruang pengguna dalam laluan kritikal. WireGuard berada dalam kernel dan bermula bersama rangkaian. Tor ialah proses yang mesti bermula, melakukan bootstrap, dan mencapai relay guard sebelum sebarang perkara berfungsi. Apabila ia gagal, anda perlu menggunakan konsol pembekal.

Ketepatan jam. Deskriptor onion service diterbitkan mengikut tempoh masa, jadi jam yang tidak tepat akan menyebabkan carian alamat gagal tanpa mesej yang jelas di mana-mana. timedatectl sepatutnya melaporkan System clock synchronized: yes.

Apa yang anda peroleh ialah pendedahan yang tidak lagi bergantung pada peraturan firewall yang betul. Tiada port untuk diimbas dan tiada banner untuk diambil, dan alamat itu sendiri merupakan kunci awam, jadi titik akhir membuktikan identitinya sebelum SSH bermula.

Jawapan praktikalnya biasanya adalah kedua-duanya. Jalankan WireGuard sebagai laluan harian, dan kekalkan onion service sebagai laluan yang masih berfungsi apabila konfigurasi WireGuard salah. Ini meninggalkan satu port UDP terbuka dan bukannya port SSH awam. Tiada satu pun daripada ini menggantikan pengukuhan sshd itu sendiri: pengesahan berasaskan kunci sahaja dan log masuk bukan root masih penting, kerana onion service melindungi laluan rangkaian dan tiada apa-apa selain itu.

Mod kegagalan dan ralat yang akan anda lihat

Tor tidak pernah melepasi Bootstrapped 0%. Trafik keluar disekat, atau jam sistem terlalu jauh tersasar. Semak polisi keluar dengan sudo ufw status verbose, kemudian jalankan timedatectl.

systemctl status tor menyatakan active (exited). Ini adalah perkara biasa pada Debian dan Ubuntu. Baca tor@default sebagai gantinya.

Deskriptor tidak dapat ditemui. Tor mengembalikan ralat lanjutan SOCKS F0, "Onion Service Descriptor Can Not be Found". Sama ada deskriptor belum diterbitkan, yang mengambil sedikit masa selepas muat semula, atau tor pada pelayan tidak berjalan.

F4, "Onion Service Missing Client Authorization". Klien tidak mempunyai .auth_private sepadan yang boleh digunakan oleh tor. Pastikan ClientOnionAuthDir berada dalam torrc, direktori tersebut mempunyai mod 0700, nama fail berakhir dengan .auth_private, dan debian-tor boleh membacanya.

F5, "Onion Service Wrong Client Authorization". Kunci peribadi tidak sepadan dengan fail .auth pada pelayan. Aksara = tambahan atau baris baharu yang tidak sepatutnya di dalam rentetan base32 menyebabkan ralat ini.

nc: invalid option -- 'X'. GNU netcat dipasang dan bukannya versi OpenBSD. Jalankan sudo apt install -y netcat-openbsd.

Could not resolve hostname. ssh mencuba DNS biasa, yang tidak mempunyai jawapan untuk .onion, jadi ProxyCommand tidak pernah dijalankan. Corak Host dalam ~/.ssh/config tidak sepadan dengan nama yang anda taip.

Permission denied (publickey). Terowong berfungsi dan tugas tor telah selesai. Anggap ini sebagai masalah publickey permission denied biasa dan abaikan tor dalam hal ini.

FAQ

Adakah onion service benar-benar bermaksud tiada port terbuka pada VPS saya?

Ya, sebaik sahaja sshd diikat pada 127.0.0.1 dan firewall menolak trafik masuk. Tor membuat sambungan TCP keluar ke relay dan sesi anda bergerak kembali melaluinya, jadi tiada apa-apa pada pelayan yang menerima sambungan pada alamat awam. Buktikan dengan ss -tlnp pada pelayan dan lakukan imbasan port dari tempat lain. Jangan lupa firewall rangkaian pembekal dalam panel kawalan, yang merupakan kawalan berasingan daripada ufw dan perlu ditutup juga.

Adakah alamat .onion sudah cukup selamat untuk SSH?

Tidak. Alamat tersebut mempunyai 56 aksara dan tidak boleh diteka atau disenaraikan daripada sistem direktori, jadi ia bertindak seperti rahsia, tetapi ia boleh terdedah melalui sejarah shell dan fail konfigurasi. Tambahkan kebenaran pelanggan v3. Dengan cara ini, deskriptor servis disulitkan kepada kunci pelanggan anda, jadi seseorang yang hanya memegang alamat tersebut akan mendapat ralat lanjutan F4 dan tidak akan sampai ke sshd langsung.

Apa yang berlaku jika tor gagal bermula selepas but semula?

Anda kehilangan akses SSH sepenuhnya, kerana alamat onion adalah satu-satunya cara untuk masuk. Itulah sebabnya konsol pembekal perlu diuji sebelum anda menutup port 22. Tor juga memerlukan masa untuk melakukan bootstrap selepas but, jadi alamat tersebut akan menjawab lewat daripada mesin yang membalas ping. Jika ia tidak menjawab langsung, log masuk melalui konsol dan baca sudo journalctl -u tor@default -b, di mana ralat sintaks torrc atau masalah kebenaran pada /var/lib/tor/ssh akan dipaparkan.

Adakah SSH melalui Tor lebih perlahan daripada WireGuard?

Ya, dengan perbezaan yang ketara. Sambungan ke onion service merentasi kira-kira enam relay yang dipilih secara rawak, manakala WireGuard adalah satu hop tersulit terus ke pelayan anda. Menaip terasa lambat dan pemindahan data adalah perlahan. Persediaan yang biasa digunakan ialah WireGuard untuk kerja harian dengan onion service dikekalkan sebagai laluan kecemasan yang berfungsi sekiranya konfigurasi VPN rosak.