Compare commits

..
18 Commits
Author SHA1 Message Date
bj a5059fafae fixed svc-hostname script error with curl and grep 2021-06-07 08:02:19 +00:00
root 573f5a8c9e ignore production files 2021-03-09 09:49:58 +00:00
bj 776ab35eac FIX: getting 'Client <unknown> disconnected, not authorised.' error in logs due to upgrade of docker image to 2.0... reverting to 1.6 2021-02-12 11:54:02 +02:00
bj c33f6523e2 docker compose containers should start automatically 2021-02-08 09:57:29 +02:00
bj b409d7fe28 bugfig: docker error cannot mount file as directory 2021-02-07 12:03:36 +02:00
bj c51cd684e2 fixed backup script to use full path to docker-compose for use in cron jobs 2020-11-09 14:25:54 +02:00
bj 528b0ee77f Added backup script 2020-11-02 19:23:01 +02:00
bj fe766569c3 That script was crap. It failed due to hard-coded docker-compose project names 2020-11-02 16:20:26 +02:00
bj 8c02e4f231 Added persistent state to tor service 2020-11-02 14:19:56 +02:00
bj ffe167767c Added 'depends_on' in docker-compose to make sure that containers come up in the correct order 2020-11-01 20:40:45 +02:00
bj 4c7d3d8bb2 Added .gitignore for any .env file 2020-10-23 13:14:58 +02:00
bj a942f78bcf Tweaked README.md 2020-10-23 12:48:46 +02:00
bj 421fc1ffdb Updated README.md 2020-10-23 12:13:00 +02:00
bj e88a341d95 Edited README.md 2020-10-23 11:42:37 +02:00
bj 51aa549048 Added README.md 2020-10-23 11:19:32 +02:00
bj 75a2512438 Parameterized docker-compose.yml file using .env 2020-10-23 10:45:57 +02:00
bj ab9b6fc372 Refactored config location 2020-10-22 20:19:19 +02:00
bj 888ac26781 Refactored... still works 2020-10-22 20:11:57 +02:00
20 changed files with 196 additions and 139 deletions
+4
View File
@@ -0,0 +1,4 @@
BROKER_MQTT_PORT=1883
BROKER_MQTTS_PORT=8883
HTTP_PORT=7700
CONFIG_DIR=./example-config
+3
View File
@@ -0,0 +1,3 @@
.env
*.tar.gz
config/
+105
View File
@@ -0,0 +1,105 @@
# TORch Subscriber Docker Compose
This is a [Docker Compose](https://docs.docker.com/compose/) project for assembling a service to receive [TORch](https://git.rudefox.io/bj/torch-agent) notifications from remote nodes and store them for access via RESTful interface.
It is composed of the following micro-services:
* Tor proxy - for receving notifications from remote TORch clients via Tor
* Broker - for managing publications and subscriptions
* Torchsub - for receiving notifications, maintaining a database of the latest connection info for each remote note and serving them via HTTP
## Dependencies
* [Install Docker](https://docs.docker.com/engine/install/ubuntu/)
* [Install Docker Compose](https://docs.docker.com/compose/install/)
## Quick Start
1. Create an `.env` file based on [`.env.example`](.env.example) in the project root
* **CONFIG_DIR**: points to the local configuration directory for the broker and torchsub micro-services (you will create this in the next step)
* **BROKER_MQTT_PORT**: (suggested: 1883) must match the port that you configured mosquitto to listen for MQTT on
* **BROKER_MQTTS_PORT**: (suggested: 8883) must match the port that you configured mosquitto to listen for MQTTS on
* **HTTP_PORT**: the port that you would like Torchsub to listen on for incoming HTTP-REST requests for client connection info
2. Create the local configuration directory pointed to by `.env`
1. Create [Mosquitto](https://mosquitto.org/man/mosquitto-conf-5.html) configuration files
* Create a `mosquitto.conf` based on the [example](example-config/mosquitto.conf)
* Add applicable `ca.crt`, key and/or broker certificate files as applicable for the mosquitto configuration
2. Create a `torch-sub.conf` per the [torch-subscriber-simple](https://git.rudefox.io/bj/torch-subscriber-simple) project
* Add applicable `ca.crt`, key and/or broker certificate files as applicable for the `torch-sub.conf` configuration
3. Run `docker-compose up -d` from the project directory to launch the services
4. Get the Tor onion hostname of your newly launched TORch node monitor
* Keep the onion hostname private
```bash
ubuntu@broker:~$ docker-compose exec tor svc-hostname
*****
* Service Onion Hostname: 24xb3hb2pajid44ugroua2ndvpipvmuw6pfjrivlbupxhpwbugfhdeqd.onion
*****
```
5. Configure any remote [TORch agent](https://git.rudefox.io/bj/torch-agent) instances with the above onion hostname by editing their `torch.conf` files
* The idea is really to provision new nodes with this instances of TORch Agent configured with this onion hostname, so that when they boot they will phone home with Tor connection info
1. Set `BrokerHost` to the Tor onion hostname
2. Set `BrokerPort` to the Mosquitto MQTT broker port you used above (ex. `1883`)
3. You should set `RequiredCertificate` to `false` because torch-agent won't be able to match the broker's certificate to the Tor onion hostname
4. Be sure to match the `Topic` with the pattern you told Torchsub to subscribe to when you configured Torchsub using `torch-sub.conf` above
```bash
# Example TORch Agent torch.conf configuration
[tor]
ControllerPort = 9051
[ssh]
Port = 22
[mqtt]
BrokerHost = 7v4jfonpcvvv4cy32po3uwqr56hvjag6ljpauennshecmzv4deq27lyd.onion
BrokerPort = 1883
ClientID = vagrant
Topic = torch/vagrant/wake
RequireCertificate = false
CaFile = ca.crt
CertFile = vagrant.crt
KeyFile = vagrant.key
```
6. Check the latest client connection info using the RESTful interface on the port you specified in the `.env` file above:
```bash
ubuntu@broker:~$ curl http://localhost:7700/clients
{"vagrant": {"clientId": "vagrant", "timestamp": "23-Oct-2020 (09:35:12.282901)", "onionAddress": "xbkcb3a47s6swrohdzcsuq6iwix3qjsn6mf77dkxywxgxucynhotglyd.onion", "sshPort": 22}}
```
7. You should be able to connect to this remote node using SSH through your local Tor proxy
```bash
ubuntu@broker:~$ torify ssh vagrant@xbkcb3a47s6swrohdzcsuq6iwix3qjsn6mf77dkxywxgxucynhotglyd.onion
The authenticity of host 'xbkcb3a47s6swrohdzcsuq6iwix3qjsn6mf77dkxywxgxucynhotglyd.onion (127.42.42.0)' can't be established.
ECDSA key fingerprint is SHA256:WSLn8lruVwPfqw5vmeZgZeTrulxboDKdJnnFMKiEGv8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'xbkcb3a47s6swrohdzcsuq6iwix3qjsn6mf77dkxywxgxucynotglyd.onion' (ECDSA) to the list of known hosts.
vagrant@xbkcb3a47s6swrohdzcsuq6iwix3qjsn6mf77dkxywxgxucynhotglyd.onion's password:
Last login: Fri Oct 23 09:34:22 2020 from 10.0.2.2
vagrant@ubuntu2004:~$
```
+21 -11
View File
@@ -6,36 +6,46 @@ services:
build:
context: ./tor
args:
- SVC_PORT=1883
- SVC_HOST=mqtt.example.com
- SVC_PORT=${BROKER_MQTT_PORT}
- SVC_HOST=broker
volumes:
- tor_config:/var/lib/tor
networks:
- tor_net
depends_on:
- broker
restart: unless-stopped
mqtt.example.com:
image: eclipse-mosquitto
broker:
image: eclipse-mosquitto:1.6
volumes:
- broker_data:/mosquitto/data
- ./broker-config:/mosquitto/config
- ${CONFIG_DIR}:/mosquitto/config:ro
ports:
- "1883:1883"
- "8883:8883"
- ${BROKER_MQTT_PORT}:${BROKER_MQTT_PORT}
- ${BROKER_MQTTS_PORT}:${BROKER_MQTTS_PORT}
networks:
- tor_net
- broker_net
restart: unless-stopped
subscriber:
build: './subscriber'
volumes:
- sub_data:/data
- ./sub-config:/etc/torch
- client_data:/data
- ${CONFIG_DIR}:/etc/torch:ro
ports:
- "9999:3434"
- ${HTTP_PORT}:8080
networks:
- broker_net
depends_on:
- broker
restart: unless-stopped
volumes:
broker_data:
sub_data:
client_data:
tor_config:
networks:
tor_net:
@@ -4,8 +4,6 @@ log_type all
listener 1883
cafile /mosquitto/config/ca.crt
#keyfile /mosquitto/config/mqtt.example.com.key
#certfile /mosquitto/config/mqtt.example.com.crt
require_certificate true
use_identity_as_username true
@@ -5,8 +5,9 @@
[mqtt]
#Topic is required
BrokerHost=broker
BrokerPort=8883
BrokerPort=1883
Topic=torch/+/wake
RequireCertificate=False
CaFile=ca.crt
KeyFile=subscriber.key
CertFile=subscriber.crt
@@ -17,4 +18,4 @@ Filename=torch_clients.json
[web]
#Port is optional and defaults to 8080
Port=3434
Port=8080
+55
View File
@@ -0,0 +1,55 @@
#!/bin/bash -e
[ $# -lt 2 ] && { echo "Usage: $0 {backup|restore} BACKUP_FILENAME"; exit 1; }
DOCKER_COMPOSE=/usr/bin/docker-compose
backup_file=$2
project_subscriber_volume_name=client_data
project_tor_volume_name=tor_config
tor_service=tor
$DOCKER_COMPOSE --log-level WARNING up --no-start
project_name=$(docker ps -a --no-trunc | grep $($DOCKER_COMPOSE ps -q ${tor_service}) | awk '{ print $2; }' | awk -F "_" '{ print $1; }')
project_volumes=$(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2"\n";}')
subscriber_volume=$(echo "$project_volumes" | grep ${project_subscriber_volume_name} | xargs)
tor_volume=$(echo "$project_volumes" | grep ${project_tor_volume_name} | xargs)
function backup {
docker run --rm \
-v $subscriber_volume:/data/subscriber \
-v $tor_volume:/data/tor \
-v $(pwd):/backup \
ubuntu \
tar -C / -czvf /backup/$backup_file data
docker run --rm \
-v $(pwd):/backup \
ubuntu \
chown $UID:$UID /backup/$backup_file
}
function restore {
$DOCKER_COMPOSE stop $tor_service
cp $backup_file backup.tar.gz
docker run --rm \
-v $subscriber_volume:/data/subscriber \
-v $tor_volume:/data/tor \
-v $(pwd)/$backup_file:/backup/backup.tar.gz \
ubuntu \
tar -C / -xzvf /backup/backup.tar.gz
$DOCKER_COMPOSE start $tor_service
rm backup.tar.gz
}
$1
-23
View File
@@ -1,23 +0,0 @@
-----BEGIN CERTIFICATE-----
MIID6zCCAtOgAwIBAgIUQJye5MbZVMpOpu87TmmlN/KOBj0wDQYJKoZIhvcNAQEL
BQAwgYQxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOWTERMA8GA1UEBwwITmV3IFlv
cmsxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEcMBoGA1UEAwwTY2EubXF0dC5leGFt
cGxlLmNvbTEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20wHhcNMjAx
MDA2MTA1OTE4WhcNMzAxMDA0MTA1OTE4WjCBhDELMAkGA1UEBhMCVVMxCzAJBgNV
BAgMAk5ZMREwDwYDVQQHDAhOZXcgWW9yazEVMBMGA1UECgwMRXhhbXBsZSBJbmMu
MRwwGgYDVQQDDBNjYS5tcXR0LmV4YW1wbGUuY29tMSAwHgYJKoZIhvcNAQkBFhFh
ZG1pbkBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALVndltaj3SX1zuJB0F5woIMUZCHopkgiO027/qE10IgM6SN4lFhR7wR0B/9PXrf
zn1xTC63w9xd3GbnlJvcWhWbh/m1t2Qx2mIvOmoELY8wlY6/V6NzjSgju7mZi0u6
aitU+LXINNuGS+JhVpc54QQ8M9o0jKlnNGnEmPjv6uhbNXx3f8lw3eqSr1ZqmpGd
UQVYKsNYBVzSqsnh/sn/KnGYn/nmpsKRWeLhoslJ3zDjaM/Y4NYol11nWFIPYCk5
7rzzxES/WdWLLnZ2W59YCT54YOGFqXE7oYgReD+Og2YwnGVQQpDcvb2HyIZL/2pa
oC6avMo/eC8HbSxwUKCnj1cCAwEAAaNTMFEwHQYDVR0OBBYEFEC8a9l0rpIdUqCS
i4NJwXlqUoLeMB8GA1UdIwQYMBaAFEC8a9l0rpIdUqCSi4NJwXlqUoLeMA8GA1Ud
EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGzxJWZdVozskr5yie2uetpL
aAReCaHEdWudRN3wVW1Dpm2sE23x4VFiJ+Uow9k21GgtGUsAIFqRgb3/QO+ipODC
GRwZmVopkuOaHfCz+tO8xqjvGHCidhhhNFdR9uVkWHoPKsQsvap0SSk12KMtFBRo
3rmeQwPP4qEPFEwc2U0hCUMsIUvMSt3KrA/j+aMRzOXU7QIMFbcYEF1IaGJz1RMh
h1VCXaUlL2liVTWU4XgudB8rMOuETec7un9hzoBVOWHxXdRrGPaoN4+zWiLRCDXO
6wapOhkmTOXuZY/NcMMwTmdJKTEQBD6XIQamv91Ne2bT89LHpcp1LjbaCz+UAxg=
-----END CERTIFICATE-----
-21
View File
@@ -1,21 +0,0 @@
##############################################################################
# Sample torch-sub.conf file
##############################################################################
[mqtt]
#Topic is required
BrokerHost=mqtt.example.com
BrokerPort=8883
Topic=torch/+/wake
RequireCertificate=True
CaFile=ca.crt
KeyFile=subscriber.key
CertFile=subscriber.crt
[database]
#Filename is optional and defaults to 'clients.json'
Filename=torch_clients.json
[web]
#Port is optional and defaults to 8080
Port=3434
+3 -6
View File
@@ -1,16 +1,13 @@
FROM python:3
#WORKDIR /usr/src
#RUN git clone https://git.rudefox.io/bj/torch-subscriber-simple.git
ADD torch-subscriber-simple /usr/src/torch-sub
WORKDIR /usr/src/torch-sub
WORKDIR /usr/src
RUN git clone https://git.rudefox.io/bj/torch-subscriber-simple.git
WORKDIR /usr/src/torch-subscriber-simple
RUN pip3 install --no-cache-dir -r requirements.txt && \
python3 setup.py install
WORKDIR /data
EXPOSE 8080
VOLUME [ "/etc/torch", "/data" ]
ENTRYPOINT [ "torch-sub" ]
Submodule subscriber/torch-subscriber-simple deleted from 1eee40a30e
-23
View File
@@ -1,23 +0,0 @@
-----BEGIN CERTIFICATE-----
MIID6zCCAtOgAwIBAgIUQJye5MbZVMpOpu87TmmlN/KOBj0wDQYJKoZIhvcNAQEL
BQAwgYQxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOWTERMA8GA1UEBwwITmV3IFlv
cmsxFTATBgNVBAoMDEV4YW1wbGUgSW5jLjEcMBoGA1UEAwwTY2EubXF0dC5leGFt
cGxlLmNvbTEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20wHhcNMjAx
MDA2MTA1OTE4WhcNMzAxMDA0MTA1OTE4WjCBhDELMAkGA1UEBhMCVVMxCzAJBgNV
BAgMAk5ZMREwDwYDVQQHDAhOZXcgWW9yazEVMBMGA1UECgwMRXhhbXBsZSBJbmMu
MRwwGgYDVQQDDBNjYS5tcXR0LmV4YW1wbGUuY29tMSAwHgYJKoZIhvcNAQkBFhFh
ZG1pbkBleGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALVndltaj3SX1zuJB0F5woIMUZCHopkgiO027/qE10IgM6SN4lFhR7wR0B/9PXrf
zn1xTC63w9xd3GbnlJvcWhWbh/m1t2Qx2mIvOmoELY8wlY6/V6NzjSgju7mZi0u6
aitU+LXINNuGS+JhVpc54QQ8M9o0jKlnNGnEmPjv6uhbNXx3f8lw3eqSr1ZqmpGd
UQVYKsNYBVzSqsnh/sn/KnGYn/nmpsKRWeLhoslJ3zDjaM/Y4NYol11nWFIPYCk5
7rzzxES/WdWLLnZ2W59YCT54YOGFqXE7oYgReD+Og2YwnGVQQpDcvb2HyIZL/2pa
oC6avMo/eC8HbSxwUKCnj1cCAwEAAaNTMFEwHQYDVR0OBBYEFEC8a9l0rpIdUqCS
i4NJwXlqUoLeMB8GA1UdIwQYMBaAFEC8a9l0rpIdUqCSi4NJwXlqUoLeMA8GA1Ud
EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGzxJWZdVozskr5yie2uetpL
aAReCaHEdWudRN3wVW1Dpm2sE23x4VFiJ+Uow9k21GgtGUsAIFqRgb3/QO+ipODC
GRwZmVopkuOaHfCz+tO8xqjvGHCidhhhNFdR9uVkWHoPKsQsvap0SSk12KMtFBRo
3rmeQwPP4qEPFEwc2U0hCUMsIUvMSt3KrA/j+aMRzOXU7QIMFbcYEF1IaGJz1RMh
h1VCXaUlL2liVTWU4XgudB8rMOuETec7un9hzoBVOWHxXdRrGPaoN4+zWiLRCDXO
6wapOhkmTOXuZY/NcMMwTmdJKTEQBD6XIQamv91Ne2bT89LHpcp1LjbaCz+UAxg=
-----END CERTIFICATE-----
-21
View File
@@ -1,21 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIDhzCCAm8CFFfe134gzLKm3ieNbeoxCvOhwsGyMA0GCSqGSIb3DQEBCwUAMIGE
MQswCQYDVQQGEwJVUzELMAkGA1UECAwCTlkxETAPBgNVBAcMCE5ldyBZb3JrMRUw
EwYDVQQKDAxFeGFtcGxlIEluYy4xHDAaBgNVBAMME2NhLm1xdHQuZXhhbXBsZS5j
b20xIDAeBgkqhkiG9w0BCQEWEWFkbWluQGV4YW1wbGUuY29tMB4XDTIwMTAwNjEx
MDYwM1oXDTMwMTAwNDExMDYwM1owezELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk5Z
MREwDwYDVQQHDAhOZXcgWW9yazEVMBMGA1UECgwMRXhhbXBsZSBJbmMuMRMwEQYD
VQQDDApzdWJzY3JpYmVyMSAwHgYJKoZIhvcNAQkBFhFhZG1pbkBleGFtcGxlLmNv
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPuE9XvVpmvnFAj2ZCMv
UWpE4yea69f4XtZ64Bw+Kp2B9NF+1lU7OTpnP+1Xubx7GX2Fy4E7w+jKwrC4+R+Z
qtZh9UCLj7IEin6NoaKgLSXd75A9UFZbI9Vug7VSxm581J8qDzVNnflTwRBPvnC6
1B1noXZRZGUbVjtC7ciIJ33bHktlTBbVvZwdZIB0upXe3iDeXE8I1izU+FB0EbCr
gmneo3mPW/5IPDGGJy1YI9HNa/h3gnZ5uomQ2/rhUB46Zr2+9/bGQHknIBMISWx6
UR0FlkdCu4ezm377IjBATBXaEoqoWfyRSuLDgkAAiHbtp+IQpIL+soOczMjUhvhg
FyECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEACFy4ioFB5jeW+vMrTGfcwbq0qFW4
9zupWVKG4H+l4N/bjiwTpKy8oP7STBS94BbA6fYE8Y+Jcibas1zX78HFIk/A9Dh1
q9lysu7Biv4JbaXVPHxy9SzadUPym3bYAJtVRWsC1N2siI1NlalttDU1y+RnllUL
jixHf2/EghYgJydN7yoTWD7rbGD2GB4ADhohhMx5NL3h/7wge4qhvBIVEoa093hV
0rzctNrP0bDsZIei3RV6mat6teR4MUK7PQSmiwTPoFmbNB+T+sl/hT22B7utooQT
h5H39zpLiorQEUMF7qJff/7+KXs7YUGUFyAQyGnxhMhAQ7zWrkrR50sFwg==
-----END CERTIFICATE-----
-27
View File
@@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA+4T1e9Wma+cUCPZkIy9RakTjJ5rr1/he1nrgHD4qnYH00X7W
VTs5Omc/7Ve5vHsZfYXLgTvD6MrCsLj5H5mq1mH1QIuPsgSKfo2hoqAtJd3vkD1Q
Vlsj1W6DtVLGbnzUnyoPNU2d+VPBEE++cLrUHWehdlFkZRtWO0LtyIgnfdseS2VM
FtW9nB1kgHS6ld7eIN5cTwjWLNT4UHQRsKuCad6jeY9b/kg8MYYnLVgj0c1r+HeC
dnm6iZDb+uFQHjpmvb739sZAeScgEwhJbHpRHQWWR0K7h7ObfvsiMEBMFdoSiqhZ
/JFK4sOCQACIdu2n4hCkgv6yg5zMyNSG+GAXIQIDAQABAoIBAQDHKe6VQ4XHlbBo
tGpw7gwjAS96chNk7fhzD9OcqaFnHbv1k+E2lnHnjFCzqS6bUELMAYE28VNdaAko
lSA35J/BqMnidWCwzyW3toESXJHDlW0Yo2SVLRA/9oX2s/gLD2/yJQTr6W05PBf5
yZt8eoRyUFgrb6H26eGrhYDytNXIsoL5Si7Q3/gc11jW5HLOqUhSE2oFQ9+xqq7B
HvD6a6nTF8upM2sTkyy9+n5RRuaqRfNTZmVzjNQOnnG+QyRyI0pdhipO77/+2JSl
8Db4F195wbZlxGsW7NwkJGCM0O9Fyaa2z7J/Je1KTuoTu+fCUhLwiojVLsQq10kO
ZZWm65+dAoGBAP6mi6K9H9LTzZ93XIOfmK9Q7S5SyOKQWLnSHMNyIsrtnZBWATEO
u16FNSOzdieOjY0rKptChUiqaTMavUEmk6aRLfkUqbrJygc8M+RH6xnb0Z1VXtM5
bEvPgYu0mm550AvEFsnu77fr194GAIhabdvzMz7b7EvDzPO86iXwGRWPAoGBAPza
Km38aH+Ccpk2084H47v783fUXyS2ScbtccVZxqtn0sxEFVnwESYQjz9QovTNlqyN
Y6t6mr1M8nM8MmPwBXFa3D654xtew8zpiA/MvCDbqlXB87BeTSMJWPAERVw2XqAm
wYFg0yJXlRRgQDiiCZCxsVzppSwct/Aa6euGXpBPAoGBAPhSKDCWBIZujEFJACpK
Y3XykJdvmv10jVEHF41vq4X/mHq7o4XXO9e8Rkl+I2YHmPlkcrPcdmSZ6OQw2wTB
PZJcWFxgTfMb+6p6ho/Bof0hYpLuQP3xLS3wN/+oKkA5ASu4GBDqs1DC50pWyAYv
SJoH2p0dkJuBYEb+ncZJD+z5AoGAD6UUEQAYGyOgIZjB3DKixaPeOaDbTjM1N2jD
rFlUsJBY+6iOxaTT+s31fw5nNsxtsTmCXD7WyjWznquv1n0oaQ4dKIhp4+ymIsyk
TY32afYNgQbiJByBm1Rdu2QYQo9epXwgZvftuGdA4yTddGOaQeist7oBLUyNmP6h
UKBcw4MCgYEArWhvqZUvklgmTJi8bSyJaCuZrd7l4HxoajceQ7ujyl/N2zX+HAio
8uw46NUvsiyIk3OCI/59G5BrBtOIYq5KUTNhDdz6q0HMz1MSDRCH5Zt0Cokam+jX
j7QGOQnhTHkGv8Mabo6gmLPifPuYboFzivFGMJH8ur+38YOyGxbwvqI=
-----END RSA PRIVATE KEY-----
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/sh
while ! curl -s --socks5 127.0.0.1:9050 'https://check.torproject.org/' | grep -qm1 Congratulations
while ! curl -s -N --socks5 127.0.0.1:9050 'https://check.torproject.org/' | grep -qm1 Congratulations
do
sleep 0.5
done