From b0931772489f23d7488c275dab5b10b063286e38 Mon Sep 17 00:00:00 2001 From: Benjamin Dweck Date: Wed, 7 Oct 2020 12:13:36 +0200 Subject: [PATCH] Working Debian package! --- example/Vagrantfile | 21 +- example/torch-agent_0.0.1-1_all.deb | Bin 0 -> 5200 bytes .../torch-agent/installed-by-dh_install | 2 + .../torch-agent/installed-by-dh_installdocs | 0 .../generated/torch-agent/postinst.service | 27 ++ .../generated/torch-agent/prerm.service | 5 + torch-agent-0.0.1/debian/README.Debian | 6 + torch-agent-0.0.1/debian/README.source | 10 + torch-agent-0.0.1/debian/changelog | 5 + torch-agent-0.0.1/debian/control | 16 + torch-agent-0.0.1/debian/copyright | 23 ++ .../debian/debhelper-build-stamp | 1 + torch-agent-0.0.1/debian/files | 2 + torch-agent-0.0.1/debian/manpage.1.ex | 56 ++++ torch-agent-0.0.1/debian/manpage.sgml.ex | 154 +++++++++ torch-agent-0.0.1/debian/manpage.xml.ex | 291 ++++++++++++++++++ torch-agent-0.0.1/debian/postinst | 77 +++++ torch-agent-0.0.1/debian/postrm | 49 +++ torch-agent-0.0.1/debian/preinst | 39 +++ torch-agent-0.0.1/debian/prerm.ex | 38 +++ torch-agent-0.0.1/debian/rules | 32 ++ torch-agent-0.0.1/debian/salsa-ci.yml.ex | 11 + torch-agent-0.0.1/debian/source/format | 1 + .../debian/source/include-binaries | 2 + .../debian/src/etc/torch/torch.conf | 19 ++ .../src/usr/share/torch-agent/torch-agent.py | 98 ++++++ .../debian/torch-agent-docs.docs | 2 + .../debian/torch-agent.cron.d.ex | 4 + .../debian/torch-agent.debhelper.log | 1 + .../debian/torch-agent.doc-base.EX | 20 ++ torch-agent-0.0.1/debian/torch-agent.install | 2 + .../debian/torch-agent.postrm.debhelper | 19 ++ torch-agent-0.0.1/debian/torch-agent.service | 13 + .../debian/torch-agent.substvars | 2 + .../debian/torch-agent/DEBIAN/conffiles | 1 + .../debian/torch-agent/DEBIAN/control | 12 + .../debian/torch-agent/DEBIAN/md5sums | 5 + .../debian/torch-agent/DEBIAN/postinst | 104 +++++++ .../debian/torch-agent/DEBIAN/postrm | 68 ++++ .../debian/torch-agent/DEBIAN/preinst | 39 +++ .../debian/torch-agent/DEBIAN/prerm | 7 + .../debian/torch-agent/etc/torch/torch.conf | 19 ++ .../lib/systemd/system/torch-agent.service | 13 + .../usr/share/doc/torch-agent/README.Debian | 6 + .../share/doc/torch-agent/changelog.Debian.gz | Bin 0 -> 144 bytes .../usr/share/doc/torch-agent/copyright | 23 ++ .../usr/share/torch-agent/torch-agent.py | 98 ++++++ torch-agent-0.0.1/debian/watch.ex | 38 +++ torch-agent_0.0.1-1.debian.tar.xz | Bin 0 -> 9636 bytes torch-agent_0.0.1-1.dsc | 35 +++ torch-agent_0.0.1-1_all.deb | Bin 0 -> 5200 bytes torch-agent_0.0.1-1_amd64.buildinfo | 195 ++++++++++++ torch-agent_0.0.1-1_amd64.changes | 49 +++ torch-agent_0.0.1.orig.tar.xz | Bin 0 -> 9788 bytes 54 files changed, 1748 insertions(+), 12 deletions(-) create mode 100644 example/torch-agent_0.0.1-1_all.deb create mode 100644 torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_install create mode 100644 torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_installdocs create mode 100644 torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/postinst.service create mode 100644 torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/prerm.service create mode 100644 torch-agent-0.0.1/debian/README.Debian create mode 100644 torch-agent-0.0.1/debian/README.source create mode 100644 torch-agent-0.0.1/debian/changelog create mode 100644 torch-agent-0.0.1/debian/control create mode 100644 torch-agent-0.0.1/debian/copyright create mode 100644 torch-agent-0.0.1/debian/debhelper-build-stamp create mode 100644 torch-agent-0.0.1/debian/files create mode 100644 torch-agent-0.0.1/debian/manpage.1.ex create mode 100644 torch-agent-0.0.1/debian/manpage.sgml.ex create mode 100644 torch-agent-0.0.1/debian/manpage.xml.ex create mode 100644 torch-agent-0.0.1/debian/postinst create mode 100644 torch-agent-0.0.1/debian/postrm create mode 100755 torch-agent-0.0.1/debian/preinst create mode 100644 torch-agent-0.0.1/debian/prerm.ex create mode 100755 torch-agent-0.0.1/debian/rules create mode 100644 torch-agent-0.0.1/debian/salsa-ci.yml.ex create mode 100644 torch-agent-0.0.1/debian/source/format create mode 100755 torch-agent-0.0.1/debian/source/include-binaries create mode 100755 torch-agent-0.0.1/debian/src/etc/torch/torch.conf create mode 100755 torch-agent-0.0.1/debian/src/usr/share/torch-agent/torch-agent.py create mode 100644 torch-agent-0.0.1/debian/torch-agent-docs.docs create mode 100644 torch-agent-0.0.1/debian/torch-agent.cron.d.ex create mode 100644 torch-agent-0.0.1/debian/torch-agent.debhelper.log create mode 100644 torch-agent-0.0.1/debian/torch-agent.doc-base.EX create mode 100644 torch-agent-0.0.1/debian/torch-agent.install create mode 100644 torch-agent-0.0.1/debian/torch-agent.postrm.debhelper create mode 100644 torch-agent-0.0.1/debian/torch-agent.service create mode 100644 torch-agent-0.0.1/debian/torch-agent.substvars create mode 100644 torch-agent-0.0.1/debian/torch-agent/DEBIAN/conffiles create mode 100644 torch-agent-0.0.1/debian/torch-agent/DEBIAN/control create mode 100644 torch-agent-0.0.1/debian/torch-agent/DEBIAN/md5sums create mode 100755 torch-agent-0.0.1/debian/torch-agent/DEBIAN/postinst create mode 100755 torch-agent-0.0.1/debian/torch-agent/DEBIAN/postrm create mode 100755 torch-agent-0.0.1/debian/torch-agent/DEBIAN/preinst create mode 100755 torch-agent-0.0.1/debian/torch-agent/DEBIAN/prerm create mode 100755 torch-agent-0.0.1/debian/torch-agent/etc/torch/torch.conf create mode 100644 torch-agent-0.0.1/debian/torch-agent/lib/systemd/system/torch-agent.service create mode 100644 torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/README.Debian create mode 100644 torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/changelog.Debian.gz create mode 100644 torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/copyright create mode 100755 torch-agent-0.0.1/debian/torch-agent/usr/share/torch-agent/torch-agent.py create mode 100644 torch-agent-0.0.1/debian/watch.ex create mode 100644 torch-agent_0.0.1-1.debian.tar.xz create mode 100644 torch-agent_0.0.1-1.dsc create mode 100644 torch-agent_0.0.1-1_all.deb create mode 100644 torch-agent_0.0.1-1_amd64.buildinfo create mode 100644 torch-agent_0.0.1-1_amd64.changes create mode 100644 torch-agent_0.0.1.orig.tar.xz diff --git a/example/Vagrantfile b/example/Vagrantfile index dad908b..8c5691b 100644 --- a/example/Vagrantfile +++ b/example/Vagrantfile @@ -64,24 +64,21 @@ Vagrant.configure("2") do |config| # Ansible, Chef, Docker, Puppet and Salt are also available. Please see the # documentation for more information about their specific syntax and use. - config.vm.provision "file", source: "../torch.conf", destination: "~/torch/" - config.vm.provision "file", source: "../torch-agent.py", destination: "~/torch/" - config.vm.provision "file", source: "../torch.service", destination: "~/torch/" - config.vm.provision "file", source: "../install-ubuntu2004.sh", destination: "~/torch/" - + config.vm.provision "file", source: "torch-agent_0.0.1-1_all.deb", destination: "~/" config.vm.provision "file", source: "agent-config", destination: "~/torch-conf" config.vm.provision "shell", inline: <<-SHELL - - sudo -- sh -c "echo '10.0.2.2 mqtt.example.com' >> /etc/hosts" - cd torch - sudo ./install-ubuntu2004.sh - - sudo cp -f ../torch-conf/* /etc/torch/ + sudo -- sh -c "echo '10.0.2.2 mqtt.example.com' >> /etc/hosts" + + sudo apt update + sudo apt install -y ./torch-agent_0.0.1-1_all.deb + + sudo cp -f torch-conf/* /etc/torch/ sudo chown -R torch /etc/torch - sudo systemctl restart torch + sudo systemctl enable torch-agent + sudo systemctl start torch-agent SHELL end diff --git a/example/torch-agent_0.0.1-1_all.deb b/example/torch-agent_0.0.1-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..3082955eae830852d2fb377c942e191d34d7f2d1 GIT binary patch literal 5200 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 literal 0 HcmV?d00001 diff --git a/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_install b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_install new file mode 100644 index 0000000..a2905db --- /dev/null +++ b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_install @@ -0,0 +1,2 @@ +./debian/src/usr/share/torch-agent +./debian/src/etc/torch diff --git a/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_installdocs b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/installed-by-dh_installdocs new file mode 100644 index 0000000..e69de29 diff --git a/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/postinst.service b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/postinst.service new file mode 100644 index 0000000..4f984b0 --- /dev/null +++ b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/postinst.service @@ -0,0 +1,27 @@ +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then + if deb-systemd-helper debian-installed 'torch-agent.service'; then + # This will only remove masks created by d-s-h on package removal. + deb-systemd-helper unmask 'torch-agent.service' >/dev/null || true + + if deb-systemd-helper --quiet was-enabled 'torch-agent.service'; then + # Create new symlinks, if any. + deb-systemd-helper enable 'torch-agent.service' >/dev/null || true + fi + fi + + # Update the statefile to add new symlinks (if any), which need to be cleaned + # up on purge. Also remove old symlinks. + deb-systemd-helper update-state 'torch-agent.service' >/dev/null || true +fi +# End automatically added section +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then + if [ -d /run/systemd/system ]; then + systemctl --system daemon-reload >/dev/null || true + if [ -n "$2" ]; then + deb-systemd-invoke try-restart 'torch-agent.service' >/dev/null || true + fi + fi +fi +# End automatically added section diff --git a/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/prerm.service b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/prerm.service new file mode 100644 index 0000000..b57cbab --- /dev/null +++ b/torch-agent-0.0.1/debian/.debhelper/generated/torch-agent/prerm.service @@ -0,0 +1,5 @@ +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ -d /run/systemd/system ] && [ "$1" = remove ]; then + deb-systemd-invoke stop 'torch-agent.service' >/dev/null || true +fi +# End automatically added section diff --git a/torch-agent-0.0.1/debian/README.Debian b/torch-agent-0.0.1/debian/README.Debian new file mode 100644 index 0000000..699fb17 --- /dev/null +++ b/torch-agent-0.0.1/debian/README.Debian @@ -0,0 +1,6 @@ +torch-agent for Debian +--------------------- + + + + -- Benjamin Dweck Tue, 06 Oct 2020 15:53:02 +0200 diff --git a/torch-agent-0.0.1/debian/README.source b/torch-agent-0.0.1/debian/README.source new file mode 100644 index 0000000..88e9ee1 --- /dev/null +++ b/torch-agent-0.0.1/debian/README.source @@ -0,0 +1,10 @@ +torch-agent for Debian +--------------------- + + + + + + -- Benjamin Dweck Tue, 06 Oct 2020 15:53:02 +0200 + diff --git a/torch-agent-0.0.1/debian/changelog b/torch-agent-0.0.1/debian/changelog new file mode 100644 index 0000000..880b70d --- /dev/null +++ b/torch-agent-0.0.1/debian/changelog @@ -0,0 +1,5 @@ +torch-agent (0.0.1-1) unstable; urgency=medium + + * Initial release + + -- Benjamin Dweck Tue, 06 Oct 2020 15:53:02 +0200 diff --git a/torch-agent-0.0.1/debian/control b/torch-agent-0.0.1/debian/control new file mode 100644 index 0000000..4052515 --- /dev/null +++ b/torch-agent-0.0.1/debian/control @@ -0,0 +1,16 @@ +Source: torch-agent +Section: net +Priority: optional +Maintainer: Benjamin Dweck +Build-Depends: debhelper-compat (= 12) +Standards-Version: 4.4.1 +Homepage: https://rudefox.io +#Vcs-Browser: https://salsa.debian.org/debian/torch-agent +#Vcs-Git: https://salsa.debian.org/debian/torch-agent.git + +Package: torch-agent +Architecture: all +Depends: ssh, tor, python3-pip, ${misc:Depends} +Description: TORch is a solution for creating an SSH-via-Tor + backdoor on a remote device as a means of fallback remote + management and initial headless device configuration. \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/copyright b/torch-agent-0.0.1/debian/copyright new file mode 100644 index 0000000..b1e631f --- /dev/null +++ b/torch-agent-0.0.1/debian/copyright @@ -0,0 +1,23 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: torch-agent +Upstream-Contact: bjdweck@gmail.com +Source: https://rudefox.io + +Files: debian/* +Copyright: 2020 Benjamin Dweck +License: GPL-2+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see + . + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/debhelper-build-stamp b/torch-agent-0.0.1/debian/debhelper-build-stamp new file mode 100644 index 0000000..50c918c --- /dev/null +++ b/torch-agent-0.0.1/debian/debhelper-build-stamp @@ -0,0 +1 @@ +torch-agent diff --git a/torch-agent-0.0.1/debian/files b/torch-agent-0.0.1/debian/files new file mode 100644 index 0000000..ea349cd --- /dev/null +++ b/torch-agent-0.0.1/debian/files @@ -0,0 +1,2 @@ +torch-agent_0.0.1-1_all.deb net optional +torch-agent_0.0.1-1_amd64.buildinfo net optional diff --git a/torch-agent-0.0.1/debian/manpage.1.ex b/torch-agent-0.0.1/debian/manpage.1.ex new file mode 100644 index 0000000..d43cc54 --- /dev/null +++ b/torch-agent-0.0.1/debian/manpage.1.ex @@ -0,0 +1,56 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" (C) Copyright 2020 Benjamin Dweck , +.\" +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH Torch-agent SECTION "October 6 2020" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +torch-agent \- program to do something +.SH SYNOPSIS +.B torch-agent +.RI [ options ] " files" ... +.br +.B bar +.RI [ options ] " files" ... +.SH DESCRIPTION +This manual page documents briefly the +.B torch-agent +and +.B bar +commands. +.PP +.\" TeX users may be more comfortable with the \fB\fP and +.\" \fI\fP escape sequences to invode bold face and italics, +.\" respectively. +\fBtorch-agent\fP is a program that... +.SH OPTIONS +These programs follow the usual GNU command line syntax, with long +options starting with two dashes (`-'). +A summary of options is included below. +For a complete description, see the Info files. +.TP +.B \-h, \-\-help +Show summary of options. +.TP +.B \-v, \-\-version +Show version of program. +.SH SEE ALSO +.BR bar (1), +.BR baz (1). +.br +The programs are documented fully by +.IR "The Rise and Fall of a Fooish Bar" , +available via the Info system. diff --git a/torch-agent-0.0.1/debian/manpage.sgml.ex b/torch-agent-0.0.1/debian/manpage.sgml.ex new file mode 100644 index 0000000..ceaeb33 --- /dev/null +++ b/torch-agent-0.0.1/debian/manpage.sgml.ex @@ -0,0 +1,154 @@ + manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + + FIRSTNAME"> + SURNAME"> + + October 6 2020"> + + SECTION"> + bjdweck@gmail.com"> + + Torch-agent"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + program to do something + + + + &dhpackage; + + + + + + + + DESCRIPTION + + This manual page documents briefly the + &dhpackage; and bar + commands. + + This manual page was written for the &debian; distribution + because the original program does not have a manual page. + Instead, it has documentation in the &gnu; + Info format; see below. + + &dhpackage; is a program that... + + + + OPTIONS + + These programs follow the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + Info files. + + + + + + + + Show summary of options. + + + + + + + + Show version of program. + + + + + + SEE ALSO + + bar (1), baz (1). + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + Info system. + + + AUTHOR + + This manual page was written by &dhusername; &dhemail; for + the &debian; system (and may be used by others). Permission is + granted to copy, distribute and/or modify this document under + the terms of the &gnu; General Public License, Version 2 any + later version published by the Free Software Foundation. + + + On Debian systems, the complete text of the GNU General Public + License can be found in /usr/share/common-licenses/GPL. + + + +
+ + diff --git a/torch-agent-0.0.1/debian/manpage.xml.ex b/torch-agent-0.0.1/debian/manpage.xml.ex new file mode 100644 index 0000000..13a18ba --- /dev/null +++ b/torch-agent-0.0.1/debian/manpage.xml.ex @@ -0,0 +1,291 @@ + +.
will be generated. You may view the +manual page with: nroff -man .
| less'. A typical entry +in a Makefile or Makefile.am is: + +DB2MAN = /usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/manpages/docbook.xsl +XP = xsltproc -''-nonet -''-param man.charmap.use.subset "0" + +manpage.1: manpage.xml + $(XP) $(DB2MAN) $< + +The xsltproc binary is found in the xsltproc package. The XSL files are in +docbook-xsl. A description of the parameters you can use can be found in the +docbook-xsl-doc-* packages. Please remember that if you create the nroff +version in one of the debian/rules file targets (such as build), you will need +to include xsltproc and docbook-xsl in your Build-Depends control field. +Alternatively use the xmlto command/package. That will also automatically +pull in xsltproc and docbook-xsl. + +Notes for using docbook2x: docbook2x-man does not automatically create the +AUTHOR(S) and COPYRIGHT sections. In this case, please add them manually as + ... . + +To disable the automatic creation of the AUTHOR(S) and COPYRIGHT sections +read /usr/share/doc/docbook-xsl/doc/manpages/authors.html. This file can be +found in the docbook-xsl-doc-html package. + +Validation can be done using: `xmllint -''-noout -''-valid manpage.xml` + +General documentation about man-pages and man-page-formatting: +man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/ + +--> + + + + + + + + + + + + + +]> + + + + &dhtitle; + &dhpackage; + + + &dhfirstname; + &dhsurname; + Wrote this manpage for the Debian system. +
+ &dhemail; +
+
+
+ + 2007 + &dhusername; + + + This manual page was written for the Debian system + (and may be used by others). + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU General Public License, + Version 2 or (at your option) any later version published by + the Free Software Foundation. + On Debian systems, the complete text of the GNU General Public + License can be found in + /usr/share/common-licenses/GPL. + +
+ + &dhucpackage; + &dhsection; + + + &dhpackage; + program to do something + + + + &dhpackage; + + + + + + + + + this + + + + + + + + this + that + + + + + &dhpackage; + + + + + + + + + + + + + + + + + + + DESCRIPTION + This manual page documents briefly the + &dhpackage; and bar + commands. + This manual page was written for the Debian distribution + because the original program does not have a manual page. + Instead, it has documentation in the GNU + info + 1 + format; see below. + &dhpackage; is a program that... + + + OPTIONS + The program follows the usual GNU command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. For a complete description, see the + + info + 1 + files. + + + + + + + Does this and that. + + + + + + + Show summary of options. + + + + + + + Show version of program. + + + + + + FILES + + + /etc/foo.conf + + The system-wide configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + ${HOME}/.foo.conf + + The per-user configuration file to control the + behaviour of &dhpackage;. See + + foo.conf + 5 + for further details. + + + + + + ENVIRONMENT + + + FOO_CONF + + If used, the defined file is used as configuration + file (see also ). + + + + + + DIAGNOSTICS + The following diagnostics may be issued + on stderr: + + + Bad configuration file. Exiting. + + The configuration file seems to contain a broken configuration + line. Use the option, to get more info. + + + + + &dhpackage; provides some return codes, that can + be used in scripts: + + Code + Diagnostic + + 0 + Program exited successfully. + + + 1 + The configuration file seems to be broken. + + + + + + BUGS + The program is currently limited to only work + with the foobar library. + The upstreams BTS can be found + at . + + + SEE ALSO + + + bar + 1 + , + baz + 1 + , + foo.conf + 5 + + The programs are documented fully by The Rise and + Fall of a Fooish Bar available via the + info + 1 + system. + +
+ diff --git a/torch-agent-0.0.1/debian/postinst b/torch-agent-0.0.1/debian/postinst new file mode 100644 index 0000000..ed588b4 --- /dev/null +++ b/torch-agent-0.0.1/debian/postinst @@ -0,0 +1,77 @@ +#!/bin/sh +# postinst script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +USER="torch" +GROUP="debian-tor" + +TORRC="/etc/tor/torrc" + +configure_tor_controller() { + + TORRC_CHANGED=0 + + if ! grep -q "^ControlPort [0-9]\+" $TORRC; then + sed -i '/^#ControlPort 9051/s/^#//' $TORRC + TORRC_CHANGED=1 + fi + + if ! grep -q "^CookieAuthentication 1" $TORRC; then + sed -i '/^#CookieAuthentication 1/s/^#//' $TORRC + TORRC_CHANGED=1 + fi + + if ! grep -q "^CookieAuthFileGroupReadable 1" $TORRC; then + echo "CookieAuthFileGroupReadable 1" >> $TORRC + TORRC_CHANGED=1 + fi + + if [ $TORRC_CHANGED -eq 1 ]; then + systemctl reload tor + fi +} + +case "$1" in + configure) + + if ! getent passwd $USER >/dev/null ; then + useradd -r -g $GROUP $USER + fi + + chown $USER /etc/torch + chown $USER /etc/torch/torch.conf + chown $USER /usr/share/torch-agent/torch-agent.py + + configure_tor_controller + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/torch-agent-0.0.1/debian/postrm b/torch-agent-0.0.1/debian/postrm new file mode 100644 index 0000000..b95016c --- /dev/null +++ b/torch-agent-0.0.1/debian/postrm @@ -0,0 +1,49 @@ +#!/bin/sh +# postrm script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +USER="torch" + +case "$1" in + purge|abort-install) + rm -rf /etc/torch + rm -f /usr/share/torch-agent/torch-agent.py + if [ -x "$(command -v deluser)" ]; then + deluser --quiet --system $USER > /dev/null || true + else + echo >&2 "not removing $USER system account because deluser command was not found" + fi + ;; + remove) + ;; + upgrade|failed-upgrade|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/torch-agent-0.0.1/debian/preinst b/torch-agent-0.0.1/debian/preinst new file mode 100755 index 0000000..3e46feb --- /dev/null +++ b/torch-agent-0.0.1/debian/preinst @@ -0,0 +1,39 @@ +#!/bin/sh +# preinst script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +case "$1" in + install|upgrade) + + sudo -H pip3 install stem paho-mqtt PySocks + + mkdir -p /etc/torch + mkdir -p /usr/share/torch-agent + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/torch-agent-0.0.1/debian/prerm.ex b/torch-agent-0.0.1/debian/prerm.ex new file mode 100644 index 0000000..55eee78 --- /dev/null +++ b/torch-agent-0.0.1/debian/prerm.ex @@ -0,0 +1,38 @@ +#!/bin/sh +# prerm script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `upgrade' +# * `failed-upgrade' +# * `remove' `in-favour' +# * `deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + remove|upgrade|deconfigure) + ;; + + failed-upgrade) + ;; + + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/torch-agent-0.0.1/debian/rules b/torch-agent-0.0.1/debian/rules new file mode 100755 index 0000000..a82715a --- /dev/null +++ b/torch-agent-0.0.1/debian/rules @@ -0,0 +1,32 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +%: + dh $@ + +override_dh_installsystemd: + dh_installsystemd --no-start --no-enable + +override_dh_installinit: + # --no-enable only on init-system-helpers (>= 1.51) + #dh_installinit --no-start --no-enable + dh_installinit --no-start --no-enable + +# dh_make generated override targets +# This is example for Cmake (See https://bugs.debian.org/641051 ) +#override_dh_auto_configure: +# dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) + diff --git a/torch-agent-0.0.1/debian/salsa-ci.yml.ex b/torch-agent-0.0.1/debian/salsa-ci.yml.ex new file mode 100644 index 0000000..260ebbe --- /dev/null +++ b/torch-agent-0.0.1/debian/salsa-ci.yml.ex @@ -0,0 +1,11 @@ +# For more information on what jobs are run see: +# https://salsa.debian.org/salsa-ci-team/pipeline +# +# To enable the jobs, go to your repository (at salsa.debian.org) +# and click over Settings > CI/CD > Expand (in General pipelines). +# In "Custom CI config path" write debian/salsa-ci.yml and click +# in "Save Changes". The CI tests will run after the next commit. +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml diff --git a/torch-agent-0.0.1/debian/source/format b/torch-agent-0.0.1/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/torch-agent-0.0.1/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/torch-agent-0.0.1/debian/source/include-binaries b/torch-agent-0.0.1/debian/source/include-binaries new file mode 100755 index 0000000..d233ebf --- /dev/null +++ b/torch-agent-0.0.1/debian/source/include-binaries @@ -0,0 +1,2 @@ +debian/src/usr/share/torch-agent/torch-agent.py +debian/src/etc/torch/torch.conf \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/src/etc/torch/torch.conf b/torch-agent-0.0.1/debian/src/etc/torch/torch.conf new file mode 100755 index 0000000..d9d0afd --- /dev/null +++ b/torch-agent-0.0.1/debian/src/etc/torch/torch.conf @@ -0,0 +1,19 @@ +[tor] +ProxyPort = 9050 +ControllerPort = 9051 + +[ssh] +Port = 22 + +[mqtt] +BrokerHost = mqtt.example.com # OR example1i3uyrbfoi3fi.onion +BrokerPort = 1883 +ClientID = my-client +Topic = example/topic + +### Options for Using TLS + +#RequireCertificate = true +#CaFile = ca.crt +#CertFile = client.crt +#KeyFile = client.key \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/src/usr/share/torch-agent/torch-agent.py b/torch-agent-0.0.1/debian/src/usr/share/torch-agent/torch-agent.py new file mode 100755 index 0000000..98fd542 --- /dev/null +++ b/torch-agent-0.0.1/debian/src/usr/share/torch-agent/torch-agent.py @@ -0,0 +1,98 @@ +from stem.control import Controller +import stem.connection +import paho.mqtt.client as mqtt +import ssl +import socks +import socket +import json +import configparser +import argparse +from datetime import datetime +from os import environ + +parser = argparse.ArgumentParser(description='Broadcast SSH hidden service hostname via MQTT') + +parser.add_argument('--config-dir', nargs='?', dest='configPath', default='/etc/torch', + help='configuration directory (default: /etc/torch)') + +args = parser.parse_args() + +configPath = args.configPath + +if "TORCH_CONFIG_DIR" in environ: + configPath = environ.get("TORCH_CONFIG_DIR") + +if not configPath.endswith("/"): + configPath = configPath + "/" + +print("Using torch configuration path: " + configPath) + +config = configparser.ConfigParser() +config.read(configPath + "torch.conf") + +torProxyPort = config['tor'].getint('ProxyPort', fallback = 9050) +torControllerPort = config['tor'].getint('ControllerPort', fallback = 9051) + +sshPort = config['ssh'].getint('Port', fallback = 22) + +mqttConfig = config['mqtt'] +mqttBrokerHost = mqttConfig.get('BrokerHost', fallback = "localhost") +mqttBrokerPort = mqttConfig.getint('BrokerPort', fallback = 1883) +clientID = mqttConfig.get('ClientID', fallback = socket.gethostname()) +mqttTopic = mqttConfig.get('Topic', fallback = "torch/%s/onion_url" % (clientID)) + +mqttRequireCertificate = mqttConfig.getboolean( + 'RequireCertificate', + fallback = False) + +mqttCaFile = configPath + mqttConfig.get('CaFile') +mqttCertFile = configPath + mqttConfig.get('CertFile') +mqttKeyFile = configPath + mqttConfig.get('KeyFile') + +with Controller.from_port(port = torControllerPort) as controller: + + protocolInfo = stem.connection.get_protocolinfo(controller) + + stem.connection.authenticate_safecookie( + controller, + protocolInfo.cookie_path) + + print("Connected to Tor on port %s" % (torControllerPort)) + + service = controller.create_ephemeral_hidden_service( + sshPort, + detached = True) + + onionAddress = "%s.onion" % (service.service_id) + + print("Created Tor Hidden Service for local port %s at %s" % (sshPort, onionAddress)) + +payload = { + 'clientId': clientID, + 'timestamp': datetime.now().strftime("%d-%b-%Y (%H:%M:%S.%f)"), + 'onionAddress': onionAddress, + 'sshPort': sshPort + } + +client = mqtt.Client() +protocol = "mqtt" + +if mqttRequireCertificate: + client.tls_set( + ca_certs = mqttCaFile, + certfile = mqttCertFile, + keyfile = mqttKeyFile, + cert_reqs=ssl.CERT_REQUIRED) + protocol = "mqtts" + +if mqttBrokerHost.endswith(".onion"): + client.proxy_set(proxy_type=socks.SOCKS5, proxy_addr="localhost", proxy_port=torProxyPort) + client.tls_insecure_set(True) + +client.connect(mqttBrokerHost, mqttBrokerPort, 60) +client.publish(mqttTopic, json.dumps(payload)) +print("Connected to MQTT Broker at %s://%s:%s/%s" % (protocol, mqttBrokerHost, mqttBrokerPort, mqttTopic)) +print("Published payload: " + json.dumps(payload)) + +client.disconnect() +print("Disconnected from MQTT Broker") diff --git a/torch-agent-0.0.1/debian/torch-agent-docs.docs b/torch-agent-0.0.1/debian/torch-agent-docs.docs new file mode 100644 index 0000000..efea0a6 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent-docs.docs @@ -0,0 +1,2 @@ +README.Debian +README.source diff --git a/torch-agent-0.0.1/debian/torch-agent.cron.d.ex b/torch-agent-0.0.1/debian/torch-agent.cron.d.ex new file mode 100644 index 0000000..0910f88 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.cron.d.ex @@ -0,0 +1,4 @@ +# +# Regular cron jobs for the torch-agent package +# +0 4 * * * root [ -x /usr/bin/torch-agent_maintenance ] && /usr/bin/torch-agent_maintenance diff --git a/torch-agent-0.0.1/debian/torch-agent.debhelper.log b/torch-agent-0.0.1/debian/torch-agent.debhelper.log new file mode 100644 index 0000000..e15a197 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.debhelper.log @@ -0,0 +1 @@ +dh_installsystemd diff --git a/torch-agent-0.0.1/debian/torch-agent.doc-base.EX b/torch-agent-0.0.1/debian/torch-agent.doc-base.EX new file mode 100644 index 0000000..25a60ee --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.doc-base.EX @@ -0,0 +1,20 @@ +Document: torch-agent +Title: Debian torch-agent Manual +Author: +Abstract: This manual describes what torch-agent is + and how it can be used to + manage online manuals on Debian systems. +Section: unknown + +Format: debiandoc-sgml +Files: /usr/share/doc/torch-agent/torch-agent.sgml.gz + +Format: postscript +Files: /usr/share/doc/torch-agent/torch-agent.ps.gz + +Format: text +Files: /usr/share/doc/torch-agent/torch-agent.text.gz + +Format: HTML +Index: /usr/share/doc/torch-agent/html/index.html +Files: /usr/share/doc/torch-agent/html/*.html diff --git a/torch-agent-0.0.1/debian/torch-agent.install b/torch-agent-0.0.1/debian/torch-agent.install new file mode 100644 index 0000000..0e631be --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.install @@ -0,0 +1,2 @@ +debian/src/usr/share/torch-agent /usr/share/ +debian/src/etc/torch /etc/ \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/torch-agent.postrm.debhelper b/torch-agent-0.0.1/debian/torch-agent.postrm.debhelper new file mode 100644 index 0000000..bc043aa --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.postrm.debhelper @@ -0,0 +1,19 @@ +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ -d /run/systemd/system ]; then + systemctl --system daemon-reload >/dev/null || true +fi +# End automatically added section +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ "$1" = "remove" ]; then + if [ -x "/usr/bin/deb-systemd-helper" ]; then + deb-systemd-helper mask 'torch-agent.service' >/dev/null || true + fi +fi + +if [ "$1" = "purge" ]; then + if [ -x "/usr/bin/deb-systemd-helper" ]; then + deb-systemd-helper purge 'torch-agent.service' >/dev/null || true + deb-systemd-helper unmask 'torch-agent.service' >/dev/null || true + fi +fi +# End automatically added section diff --git a/torch-agent-0.0.1/debian/torch-agent.service b/torch-agent-0.0.1/debian/torch-agent.service new file mode 100644 index 0000000..6816b64 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.service @@ -0,0 +1,13 @@ +[Unit] +Description=TORch Agent: MQTT Publisher for Tor Hidden SSH Service URL +After=tor.service ssh.service +Requires=tor.service ssh.service + +[Service] +Environment=PYTHONUNBUFFERED=1 +ExecStart=/usr/bin/python3 /usr/share/torch-agent/torch-agent.py +User=torch +Group=debian-tor + +[Install] +WantedBy=multi-user.target ssh.service tor.service \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/torch-agent.substvars b/torch-agent-0.0.1/debian/torch-agent.substvars new file mode 100644 index 0000000..978fc8b --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent.substvars @@ -0,0 +1,2 @@ +misc:Depends= +misc:Pre-Depends= diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/conffiles b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/conffiles new file mode 100644 index 0000000..e976293 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/conffiles @@ -0,0 +1 @@ +/etc/torch/torch.conf diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/control b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/control new file mode 100644 index 0000000..495161f --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/control @@ -0,0 +1,12 @@ +Package: torch-agent +Version: 0.0.1-1 +Architecture: all +Maintainer: Benjamin Dweck +Installed-Size: 29 +Depends: ssh, tor, python3-pip +Section: net +Priority: optional +Homepage: https://rudefox.io +Description: TORch is a solution for creating an SSH-via-Tor + backdoor on a remote device as a means of fallback remote + management and initial headless device configuration. diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/md5sums b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/md5sums new file mode 100644 index 0000000..392bfd4 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/md5sums @@ -0,0 +1,5 @@ +1e2c6dfcdaab533fa279eef51cdaa500 lib/systemd/system/torch-agent.service +de899b3b2dbb67f357d153425a8421cd usr/share/doc/torch-agent/README.Debian +507827efdf54541d719f3a27e1a1db5f usr/share/doc/torch-agent/changelog.Debian.gz +7d50b1cef77999609862e52053d3ed74 usr/share/doc/torch-agent/copyright +94f2830be2c7420e0f1c4556fc08f1ec usr/share/torch-agent/torch-agent.py diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/postinst b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/postinst new file mode 100755 index 0000000..2d04f0e --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/postinst @@ -0,0 +1,104 @@ +#!/bin/sh +# postinst script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +USER="torch" +GROUP="debian-tor" + +TORRC="/etc/tor/torrc" + +configure_tor_controller() { + + TORRC_CHANGED=0 + + if ! grep -q "^ControlPort [0-9]\+" $TORRC; then + sed -i '/^#ControlPort 9051/s/^#//' $TORRC + TORRC_CHANGED=1 + fi + + if ! grep -q "^CookieAuthentication 1" $TORRC; then + sed -i '/^#CookieAuthentication 1/s/^#//' $TORRC + TORRC_CHANGED=1 + fi + + if ! grep -q "^CookieAuthFileGroupReadable 1" $TORRC; then + echo "CookieAuthFileGroupReadable 1" >> $TORRC + TORRC_CHANGED=1 + fi + + if [ $TORRC_CHANGED -eq 1 ]; then + systemctl reload tor + fi +} + +case "$1" in + configure) + + if ! getent passwd $USER >/dev/null ; then + useradd -r -g $GROUP $USER + fi + + chown $USER /etc/torch + chown $USER /etc/torch/torch.conf + chown $USER /usr/share/torch-agent/torch-agent.py + + configure_tor_controller + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then + if deb-systemd-helper debian-installed 'torch-agent.service'; then + # This will only remove masks created by d-s-h on package removal. + deb-systemd-helper unmask 'torch-agent.service' >/dev/null || true + + if deb-systemd-helper --quiet was-enabled 'torch-agent.service'; then + # Create new symlinks, if any. + deb-systemd-helper enable 'torch-agent.service' >/dev/null || true + fi + fi + + # Update the statefile to add new symlinks (if any), which need to be cleaned + # up on purge. Also remove old symlinks. + deb-systemd-helper update-state 'torch-agent.service' >/dev/null || true +fi +# End automatically added section +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then + if [ -d /run/systemd/system ]; then + systemctl --system daemon-reload >/dev/null || true + if [ -n "$2" ]; then + deb-systemd-invoke try-restart 'torch-agent.service' >/dev/null || true + fi + fi +fi +# End automatically added section + + +exit 0 diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/postrm b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/postrm new file mode 100755 index 0000000..e24684a --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/postrm @@ -0,0 +1,68 @@ +#!/bin/sh +# postrm script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `remove' +# * `purge' +# * `upgrade' +# * `failed-upgrade' +# * `abort-install' +# * `abort-install' +# * `abort-upgrade' +# * `disappear' +# +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +USER="torch" + +case "$1" in + purge|abort-install) + rm -rf /etc/torch + rm -f /usr/share/torch-agent/torch-agent.py + if [ -x "$(command -v deluser)" ]; then + deluser --quiet --system $USER > /dev/null || true + else + echo >&2 "not removing $USER system account because deluser command was not found" + fi + ;; + remove) + ;; + upgrade|failed-upgrade|abort-upgrade|disappear) + ;; + + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ -d /run/systemd/system ]; then + systemctl --system daemon-reload >/dev/null || true +fi +# End automatically added section +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ "$1" = "remove" ]; then + if [ -x "/usr/bin/deb-systemd-helper" ]; then + deb-systemd-helper mask 'torch-agent.service' >/dev/null || true + fi +fi + +if [ "$1" = "purge" ]; then + if [ -x "/usr/bin/deb-systemd-helper" ]; then + deb-systemd-helper purge 'torch-agent.service' >/dev/null || true + deb-systemd-helper unmask 'torch-agent.service' >/dev/null || true + fi +fi +# End automatically added section + + +exit 0 diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/preinst b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/preinst new file mode 100755 index 0000000..8e3fed9 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/preinst @@ -0,0 +1,39 @@ +#!/bin/sh +# preinst script for torch-agent +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `install' +# * `install' +# * `upgrade' +# * `abort-upgrade' +# for details, see https://www.debian.org/doc/debian-policy/ or +# the debian-policy package + +case "$1" in + install|upgrade) + + sudo -H pip3 install stem paho-mqtt PySocks + + mkdir -p /etc/torch + mkdir -p /usr/share/torch-agent + ;; + + abort-upgrade) + ;; + + *) + echo "preinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + + + +exit 0 diff --git a/torch-agent-0.0.1/debian/torch-agent/DEBIAN/prerm b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/prerm new file mode 100755 index 0000000..d6934ef --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/DEBIAN/prerm @@ -0,0 +1,7 @@ +#!/bin/sh +set -e +# Automatically added by dh_installsystemd/12.10ubuntu1 +if [ -d /run/systemd/system ] && [ "$1" = remove ]; then + deb-systemd-invoke stop 'torch-agent.service' >/dev/null || true +fi +# End automatically added section diff --git a/torch-agent-0.0.1/debian/torch-agent/etc/torch/torch.conf b/torch-agent-0.0.1/debian/torch-agent/etc/torch/torch.conf new file mode 100755 index 0000000..d9d0afd --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/etc/torch/torch.conf @@ -0,0 +1,19 @@ +[tor] +ProxyPort = 9050 +ControllerPort = 9051 + +[ssh] +Port = 22 + +[mqtt] +BrokerHost = mqtt.example.com # OR example1i3uyrbfoi3fi.onion +BrokerPort = 1883 +ClientID = my-client +Topic = example/topic + +### Options for Using TLS + +#RequireCertificate = true +#CaFile = ca.crt +#CertFile = client.crt +#KeyFile = client.key \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/torch-agent/lib/systemd/system/torch-agent.service b/torch-agent-0.0.1/debian/torch-agent/lib/systemd/system/torch-agent.service new file mode 100644 index 0000000..6816b64 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/lib/systemd/system/torch-agent.service @@ -0,0 +1,13 @@ +[Unit] +Description=TORch Agent: MQTT Publisher for Tor Hidden SSH Service URL +After=tor.service ssh.service +Requires=tor.service ssh.service + +[Service] +Environment=PYTHONUNBUFFERED=1 +ExecStart=/usr/bin/python3 /usr/share/torch-agent/torch-agent.py +User=torch +Group=debian-tor + +[Install] +WantedBy=multi-user.target ssh.service tor.service \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/README.Debian b/torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/README.Debian new file mode 100644 index 0000000..699fb17 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/README.Debian @@ -0,0 +1,6 @@ +torch-agent for Debian +--------------------- + + + + -- Benjamin Dweck Tue, 06 Oct 2020 15:53:02 +0200 diff --git a/torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/changelog.Debian.gz b/torch-agent-0.0.1/debian/torch-agent/usr/share/doc/torch-agent/changelog.Debian.gz new file mode 100644 index 0000000000000000000000000000000000000000..87dac0210286efebcfc482a9f23cd490bdd5afce GIT binary patch literal 144 zcmV;B0B`>viwFP!000020~Lw84uUWghIgLgAHB6XU~s@ojB#;t@dXa$1d44*N*m+b zi`#ceQ#6C(UP8i(H0e^6YveE|Zk-&F +License: GPL-2+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see + . + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". \ No newline at end of file diff --git a/torch-agent-0.0.1/debian/torch-agent/usr/share/torch-agent/torch-agent.py b/torch-agent-0.0.1/debian/torch-agent/usr/share/torch-agent/torch-agent.py new file mode 100755 index 0000000..98fd542 --- /dev/null +++ b/torch-agent-0.0.1/debian/torch-agent/usr/share/torch-agent/torch-agent.py @@ -0,0 +1,98 @@ +from stem.control import Controller +import stem.connection +import paho.mqtt.client as mqtt +import ssl +import socks +import socket +import json +import configparser +import argparse +from datetime import datetime +from os import environ + +parser = argparse.ArgumentParser(description='Broadcast SSH hidden service hostname via MQTT') + +parser.add_argument('--config-dir', nargs='?', dest='configPath', default='/etc/torch', + help='configuration directory (default: /etc/torch)') + +args = parser.parse_args() + +configPath = args.configPath + +if "TORCH_CONFIG_DIR" in environ: + configPath = environ.get("TORCH_CONFIG_DIR") + +if not configPath.endswith("/"): + configPath = configPath + "/" + +print("Using torch configuration path: " + configPath) + +config = configparser.ConfigParser() +config.read(configPath + "torch.conf") + +torProxyPort = config['tor'].getint('ProxyPort', fallback = 9050) +torControllerPort = config['tor'].getint('ControllerPort', fallback = 9051) + +sshPort = config['ssh'].getint('Port', fallback = 22) + +mqttConfig = config['mqtt'] +mqttBrokerHost = mqttConfig.get('BrokerHost', fallback = "localhost") +mqttBrokerPort = mqttConfig.getint('BrokerPort', fallback = 1883) +clientID = mqttConfig.get('ClientID', fallback = socket.gethostname()) +mqttTopic = mqttConfig.get('Topic', fallback = "torch/%s/onion_url" % (clientID)) + +mqttRequireCertificate = mqttConfig.getboolean( + 'RequireCertificate', + fallback = False) + +mqttCaFile = configPath + mqttConfig.get('CaFile') +mqttCertFile = configPath + mqttConfig.get('CertFile') +mqttKeyFile = configPath + mqttConfig.get('KeyFile') + +with Controller.from_port(port = torControllerPort) as controller: + + protocolInfo = stem.connection.get_protocolinfo(controller) + + stem.connection.authenticate_safecookie( + controller, + protocolInfo.cookie_path) + + print("Connected to Tor on port %s" % (torControllerPort)) + + service = controller.create_ephemeral_hidden_service( + sshPort, + detached = True) + + onionAddress = "%s.onion" % (service.service_id) + + print("Created Tor Hidden Service for local port %s at %s" % (sshPort, onionAddress)) + +payload = { + 'clientId': clientID, + 'timestamp': datetime.now().strftime("%d-%b-%Y (%H:%M:%S.%f)"), + 'onionAddress': onionAddress, + 'sshPort': sshPort + } + +client = mqtt.Client() +protocol = "mqtt" + +if mqttRequireCertificate: + client.tls_set( + ca_certs = mqttCaFile, + certfile = mqttCertFile, + keyfile = mqttKeyFile, + cert_reqs=ssl.CERT_REQUIRED) + protocol = "mqtts" + +if mqttBrokerHost.endswith(".onion"): + client.proxy_set(proxy_type=socks.SOCKS5, proxy_addr="localhost", proxy_port=torProxyPort) + client.tls_insecure_set(True) + +client.connect(mqttBrokerHost, mqttBrokerPort, 60) +client.publish(mqttTopic, json.dumps(payload)) +print("Connected to MQTT Broker at %s://%s:%s/%s" % (protocol, mqttBrokerHost, mqttBrokerPort, mqttTopic)) +print("Published payload: " + json.dumps(payload)) + +client.disconnect() +print("Disconnected from MQTT Broker") diff --git a/torch-agent-0.0.1/debian/watch.ex b/torch-agent-0.0.1/debian/watch.ex new file mode 100644 index 0000000..888e752 --- /dev/null +++ b/torch-agent-0.0.1/debian/watch.ex @@ -0,0 +1,38 @@ +# Example watch control file for uscan +# Rename this file to "watch" and then you can run the "uscan" command +# to check for upstream updates and more. +# See uscan(1) for format + +# Compulsory line, this is a version 4 file +version=4 + +# PGP signature mangle, so foo.tar.gz has foo.tar.gz.sig +#opts="pgpsigurlmangle=s%$%.sig%" + +# HTTP site (basic) +#http://example.com/downloads.html \ +# files/torch-agent-([\d\.]+)\.tar\.gz debian uupdate + +# Uncomment to examine an FTP server +#ftp://ftp.example.com/pub/torch-agent-(.*)\.tar\.gz debian uupdate + +# SourceForge hosted projects +# http://sf.net/torch-agent/ torch-agent-(.*)\.tar\.gz debian uupdate + +# GitHub hosted projects +#opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%-$1.tar.gz%" \ +# https://github.com//torch-agent/tags \ +# (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate + +# PyPI +# https://pypi.debian.net/torch-agent/torch-agent-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) + +# Direct Git +# opts="mode=git" http://git.example.com/torch-agent.git \ +# refs/tags/v([\d\.]+) debian uupdate + + + + +# Uncomment to find new files on GooglePages +# http://example.googlepages.com/foo.html torch-agent-(.*)\.tar\.gz diff --git a/torch-agent_0.0.1-1.debian.tar.xz b/torch-agent_0.0.1-1.debian.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..309aabe5bfeb5efa6e2339ece3e4d5c535a77ae5 GIT binary patch literal 9636 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 a0sTsV-~#}vtBe=1#Ao{g000001X)@Y<_#$T literal 0 HcmV?d00001 diff --git a/torch-agent_0.0.1-1.dsc b/torch-agent_0.0.1-1.dsc new file mode 100644 index 0000000..a62bfe5 --- /dev/null +++ b/torch-agent_0.0.1-1.dsc @@ -0,0 +1,35 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +Format: 3.0 (quilt) +Source: torch-agent +Binary: torch-agent +Architecture: all +Version: 0.0.1-1 +Maintainer: Benjamin Dweck +Homepage: https://rudefox.io +Standards-Version: 4.4.1 +Build-Depends: debhelper-compat (= 12) +Package-List: + torch-agent deb net optional arch=all +Checksums-Sha1: + 75a6ce9e0ad9f4ed0d2d31348c9db1238bd4f39d 9788 torch-agent_0.0.1.orig.tar.xz + 4b3e734647e0e62bbb17c1ed5dbbd853462613f9 9636 torch-agent_0.0.1-1.debian.tar.xz +Checksums-Sha256: + 30c630f9fdbaea2337a3e8701e753ef45a094b9403e77f9a42b2bd2ca63e8dc5 9788 torch-agent_0.0.1.orig.tar.xz + 0ffd62a08673dfc3d0a7544eb62398b8fd3bd0aa71bfd19c1a8dd816c430ec1b 9636 torch-agent_0.0.1-1.debian.tar.xz +Files: + 267a824b2a18ef73dcda05da7e99a4b5 9788 torch-agent_0.0.1.orig.tar.xz + ee6afe9f8ff5b6cade07a66f9075c505 9636 torch-agent_0.0.1-1.debian.tar.xz + +-----BEGIN PGP SIGNATURE----- + +iQFGBAEBCgAwFiEEFNiF9i0uBB0TW5u+27VgOYC/OIMFAl988dMSHGJqZHdlY2tA +Z21haWwuY29tAAoJENu1YDmAvziDfVkIAIKkS0PLQsDNUu3cJ+3UY1PboECjQdSb +0SpNuS61gRFJED9yoRg9XO5DMnpfp1qhVoZF0/wJSfel4Mbvyf8KPTpDYja9ZAkH +sjFwfqmvB2Po2VAE64ym/j7HCOGSMle6+f+NrcpDiEi592UzHR6iFi6iy8YwjhDa +xFmUJp4tPu62IUqOtASOMuQHGsY2c0j18Ev5Su0Z303MmfEp+bc/Y99lISU8cwHs +xPxOhsPCVj55E1wEi6hFeCy7sxh28W796fqOuCWKLYjIbIk2VRZC7clZ/dLn3hHk +RoXsSsBM5eFTK7uGKAOXCe1+AHZgsdnOU8XxnbvDMMbHYaaz7rnTNrw= +=pqDg +-----END PGP SIGNATURE----- diff --git a/torch-agent_0.0.1-1_all.deb b/torch-agent_0.0.1-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..3082955eae830852d2fb377c942e191d34d7f2d1 GIT binary patch literal 5200 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 literal 0 HcmV?d00001 diff --git a/torch-agent_0.0.1-1_amd64.buildinfo b/torch-agent_0.0.1-1_amd64.buildinfo new file mode 100644 index 0000000..8859537 --- /dev/null +++ b/torch-agent_0.0.1-1_amd64.buildinfo @@ -0,0 +1,195 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +Format: 1.0 +Source: torch-agent +Binary: torch-agent +Architecture: all source +Version: 0.0.1-1 +Checksums-Md5: + 0abbdb3e83d948e0076ba9298c5f5502 1397 torch-agent_0.0.1-1.dsc + 526fa2edc26efa17ce067b6b8b7780b5 5200 torch-agent_0.0.1-1_all.deb +Checksums-Sha1: + e88b32f193b3a57dd8717d02c643b6096b11e468 1397 torch-agent_0.0.1-1.dsc + 816e7a65d14e02df230346565496a2bfb4ace2ad 5200 torch-agent_0.0.1-1_all.deb +Checksums-Sha256: + 9b9a4486d39a88c09e1bd648560cd0c70cbba0e40bed9305e540e551db31d55e 1397 torch-agent_0.0.1-1.dsc + 1560cd30b4944162d0ea4f2e4c5402527d06587c98a907820c36ec455633aede 5200 torch-agent_0.0.1-1_all.deb +Build-Origin: Ubuntu +Build-Architecture: amd64 +Build-Date: Wed, 07 Oct 2020 00:38:11 +0200 +Build-Tainted-By: + merged-usr-via-symlinks + usr-local-has-libraries + usr-local-has-programs +Installed-Build-Depends: + autoconf (= 2.69-11.1), + automake (= 1:1.16.1-4ubuntu6), + autopoint (= 0.19.8.1-10build1), + autotools-dev (= 20180224.1), + base-files (= 11ubuntu5.1), + base-passwd (= 3.5.47), + bash (= 5.0-6ubuntu1.1), + binutils (= 2.34-6ubuntu1), + binutils-common (= 2.34-6ubuntu1), + binutils-x86-64-linux-gnu (= 2.34-6ubuntu1), + bsdmainutils (= 11.1.2ubuntu3), + bsdutils (= 1:2.34-0.1ubuntu9), + build-essential (= 12.8ubuntu1), + bzip2 (= 1.0.8-2), + coreutils (= 8.30-3ubuntu2), + cpp (= 4:9.3.0-1ubuntu2), + cpp-9 (= 9.3.0-10ubuntu2), + dash (= 0.5.10.2-6), + debconf (= 1.5.73), + debhelper (= 12.10ubuntu1), + debianutils (= 4.9.1), + dh-autoreconf (= 19), + dh-strip-nondeterminism (= 1.7.0-1), + diffutils (= 1:3.7-3), + dpkg (= 1.19.7ubuntu3), + dpkg-dev (= 1.19.7ubuntu3), + dwz (= 0.13-5), + file (= 1:5.38-4), + findutils (= 4.7.0-1ubuntu1), + g++ (= 4:9.3.0-1ubuntu2), + g++-9 (= 9.3.0-10ubuntu2), + gawk (= 1:5.0.1+dfsg-1), + gcc (= 4:9.3.0-1ubuntu2), + gcc-10-base (= 10-20200411-0ubuntu1), + gcc-9 (= 9.3.0-10ubuntu2), + gcc-9-base (= 9.3.0-10ubuntu2), + gettext (= 0.19.8.1-10build1), + gettext-base (= 0.19.8.1-10build1), + grep (= 3.4-1), + groff-base (= 1.22.4-4build1), + gzip (= 1.10-0ubuntu4), + hostname (= 3.23), + init-system-helpers (= 1.57), + install-info (= 6.7.0.dfsg.2-5), + intltool-debian (= 0.35.0+20060710.5), + libacl1 (= 2.2.53-6), + libarchive-zip-perl (= 1.67-2), + libasan5 (= 9.3.0-10ubuntu2), + libatomic1 (= 10-20200411-0ubuntu1), + libattr1 (= 1:2.4.48-5), + libaudit-common (= 1:2.8.5-2ubuntu6), + libaudit1 (= 1:2.8.5-2ubuntu6), + libbinutils (= 2.34-6ubuntu1), + libblkid1 (= 2.34-0.1ubuntu9), + libbsd0 (= 0.10.0-1), + libbz2-1.0 (= 1.0.8-2), + libc-bin (= 2.31-0ubuntu9), + libc-dev-bin (= 2.31-0ubuntu9), + libc6 (= 2.31-0ubuntu9), + libc6-dev (= 2.31-0ubuntu9), + libcap-ng0 (= 0.7.9-2.1build1), + libcc1-0 (= 10-20200411-0ubuntu1), + libcroco3 (= 0.6.13-1), + libcrypt-dev (= 1:4.4.10-10ubuntu4), + libcrypt1 (= 1:4.4.10-10ubuntu4), + libctf-nobfd0 (= 2.34-6ubuntu1), + libctf0 (= 2.34-6ubuntu1), + libdb5.3 (= 5.3.28+dfsg1-0.6ubuntu2), + libdebconfclient0 (= 0.251ubuntu1), + libdebhelper-perl (= 12.10ubuntu1), + libdpkg-perl (= 1.19.7ubuntu3), + libelf1 (= 0.176-1.1build1), + libffi7 (= 3.3-4), + libfile-stripnondeterminism-perl (= 1.7.0-1), + libgcc-9-dev (= 9.3.0-10ubuntu2), + libgcc-s1 (= 10-20200411-0ubuntu1), + libgcrypt20 (= 1.8.5-5ubuntu1), + libgdbm-compat4 (= 1.18.1-5), + libgdbm6 (= 1.18.1-5), + libglib2.0-0 (= 2.64.3-1~ubuntu20.04.1), + libgmp10 (= 2:6.2.0+dfsg-4), + libgomp1 (= 10-20200411-0ubuntu1), + libgpg-error0 (= 1.37-1), + libicu66 (= 66.1-2ubuntu2), + libisl22 (= 0.22.1-1), + libitm1 (= 10-20200411-0ubuntu1), + liblsan0 (= 10-20200411-0ubuntu1), + liblz4-1 (= 1.9.2-2), + liblzma5 (= 5.2.4-1ubuntu1), + libmagic-mgc (= 1:5.38-4), + libmagic1 (= 1:5.38-4), + libmount1 (= 2.34-0.1ubuntu9), + libmpc3 (= 1.1.0-1), + libmpfr6 (= 4.0.2-1), + libpam-modules (= 1.3.1-5ubuntu4), + libpam-modules-bin (= 1.3.1-5ubuntu4), + libpam-runtime (= 1.3.1-5ubuntu4), + libpam0g (= 1.3.1-5ubuntu4), + libpcre2-8-0 (= 10.34-7), + libpcre3 (= 2:8.39-12build1), + libperl5.30 (= 5.30.0-9build1), + libpipeline1 (= 1.5.2-2build1), + libquadmath0 (= 10-20200411-0ubuntu1), + libreadline8 (= 8.0-4), + libseccomp2 (= 2.4.3-1ubuntu3.20.04.3), + libselinux1 (= 3.0-1build2), + libsigsegv2 (= 2.12-2), + libsmartcols1 (= 2.34-0.1ubuntu9), + libstdc++-9-dev (= 9.3.0-10ubuntu2), + libstdc++6 (= 10-20200411-0ubuntu1), + libsub-override-perl (= 0.09-2), + libsystemd0 (= 245.4-4ubuntu3.2), + libtinfo6 (= 6.2-0ubuntu2), + libtool (= 2.4.6-14), + libtsan0 (= 10-20200411-0ubuntu1), + libubsan1 (= 10-20200411-0ubuntu1), + libuchardet0 (= 0.0.6-3build1), + libudev1 (= 245.4-4ubuntu3.2), + libunistring2 (= 0.9.10-2), + libuuid1 (= 2.34-0.1ubuntu9), + libxml2 (= 2.9.10+dfsg-5), + libzstd1 (= 1.4.4+dfsg-3), + linux-libc-dev (= 5.4.0-47.51), + login (= 1:4.8.1-1ubuntu5.20.04), + lsb-base (= 11.1.0ubuntu2), + m4 (= 1.4.18-4), + make (= 4.2.1-1.2), + man-db (= 2.9.1-1), + mawk (= 1.3.4.20200120-2), + ncurses-base (= 6.2-0ubuntu2), + ncurses-bin (= 6.2-0ubuntu2), + patch (= 2.7.6-6), + perl (= 5.30.0-9build1), + perl-base (= 5.30.0-9build1), + perl-modules-5.30 (= 5.30.0-9build1), + po-debconf (= 1.0.21), + readline-common (= 8.0-4), + sed (= 4.7-1), + sensible-utils (= 0.0.12+nmu1), + sysvinit-utils (= 2.96-2.1ubuntu1), + tar (= 1.30+dfsg-7), + tzdata (= 2020a-0ubuntu0.20.04), + util-linux (= 2.34-0.1ubuntu9), + xz-utils (= 5.2.4-1ubuntu1), + zlib1g (= 1:1.2.11.dfsg-2ubuntu1) +Environment: + DEB_BUILD_OPTIONS="parallel=4" + LANG="en_US.UTF-8" + LC_ADDRESS="en_US.UTF-8" + LC_IDENTIFICATION="en_US.UTF-8" + LC_MEASUREMENT="en_US.UTF-8" + LC_MONETARY="en_US.UTF-8" + LC_NAME="en_US.UTF-8" + LC_NUMERIC="en_US.UTF-8" + LC_PAPER="en_US.UTF-8" + LC_TELEPHONE="en_US.UTF-8" + LC_TIME="en_US.UTF-8" + SOURCE_DATE_EPOCH="1601992382" + +-----BEGIN PGP SIGNATURE----- + +iQFGBAEBCgAwFiEEFNiF9i0uBB0TW5u+27VgOYC/OIMFAl988dQSHGJqZHdlY2tA +Z21haWwuY29tAAoJENu1YDmAvziDbhIH/RLtAHLasxrim/3qkhGJAUApkzoIhxEZ +feWBwQ5nncKnt9vNRaQVOuQ4GWVRcpNtEQGWc+6/XE9U28XcOMZ/DMlvt8laFOCp +w4mmTpzFUnskXaNHqNEP3en85Opb7eeQCOJjuvEvUmo8lk5jtASXcxT7pNcDlb3X +NAXUyO22s81SHB1TnnwXOfIKLV5duo0pSJxZ+QwKoQtfYIuyHNvilvr8DaoKiltp +a2EjwyBWPfdJHHnKcv2Zyye65eQOr3VE8dP6k5OQWcuC2bHh84YgwyN6cmgWaELt +XlCu5sA5TPzNbO0gyVOtMBnyZ3B9tQ80Yzu/UWIiVTfTUzyMF8nugNI= +=l2RV +-----END PGP SIGNATURE----- diff --git a/torch-agent_0.0.1-1_amd64.changes b/torch-agent_0.0.1-1_amd64.changes new file mode 100644 index 0000000..dd04e34 --- /dev/null +++ b/torch-agent_0.0.1-1_amd64.changes @@ -0,0 +1,49 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +Format: 1.8 +Date: Tue, 06 Oct 2020 15:53:02 +0200 +Source: torch-agent +Binary: torch-agent +Architecture: source all +Version: 0.0.1-1 +Distribution: unstable +Urgency: medium +Maintainer: Benjamin Dweck +Changed-By: Benjamin Dweck +Description: + torch-agent - TORch is a solution for creating an SSH-via-Tor +Changes: + torch-agent (0.0.1-1) unstable; urgency=medium + . + * Initial release +Checksums-Sha1: + e88b32f193b3a57dd8717d02c643b6096b11e468 1397 torch-agent_0.0.1-1.dsc + 75a6ce9e0ad9f4ed0d2d31348c9db1238bd4f39d 9788 torch-agent_0.0.1.orig.tar.xz + 4b3e734647e0e62bbb17c1ed5dbbd853462613f9 9636 torch-agent_0.0.1-1.debian.tar.xz + 816e7a65d14e02df230346565496a2bfb4ace2ad 5200 torch-agent_0.0.1-1_all.deb + d6de1f688aefa348cbcb38513c0418731a32be6c 6115 torch-agent_0.0.1-1_amd64.buildinfo +Checksums-Sha256: + 9b9a4486d39a88c09e1bd648560cd0c70cbba0e40bed9305e540e551db31d55e 1397 torch-agent_0.0.1-1.dsc + 30c630f9fdbaea2337a3e8701e753ef45a094b9403e77f9a42b2bd2ca63e8dc5 9788 torch-agent_0.0.1.orig.tar.xz + 0ffd62a08673dfc3d0a7544eb62398b8fd3bd0aa71bfd19c1a8dd816c430ec1b 9636 torch-agent_0.0.1-1.debian.tar.xz + 1560cd30b4944162d0ea4f2e4c5402527d06587c98a907820c36ec455633aede 5200 torch-agent_0.0.1-1_all.deb + 98ac5666f20bfc2c3a7f803db6ac769df8be8f7f9a65742651c988e7104e5c34 6115 torch-agent_0.0.1-1_amd64.buildinfo +Files: + 0abbdb3e83d948e0076ba9298c5f5502 1397 net optional torch-agent_0.0.1-1.dsc + 267a824b2a18ef73dcda05da7e99a4b5 9788 net optional torch-agent_0.0.1.orig.tar.xz + ee6afe9f8ff5b6cade07a66f9075c505 9636 net optional torch-agent_0.0.1-1.debian.tar.xz + 526fa2edc26efa17ce067b6b8b7780b5 5200 net optional torch-agent_0.0.1-1_all.deb + 22b4edf1ac9a92dd878357a8ea5ba939 6115 net optional torch-agent_0.0.1-1_amd64.buildinfo + +-----BEGIN PGP SIGNATURE----- + +iQFGBAEBCgAwFiEEFNiF9i0uBB0TW5u+27VgOYC/OIMFAl988dQSHGJqZHdlY2tA +Z21haWwuY29tAAoJENu1YDmAvziDZJEH/0jFrjHV/crXnpwtzLt81CBJPTs84Uhp +crgNc1Dh6cul4a78mIlNMr/aTTAHUqV0PuOAuNsrsNZA0LBPH9Fa/sFuQAQVp8UC +TFffl9gt+s8UnR+JyYVW29PU/bLyrFeZPYYOrH/4xJ1houxgtAFgUh3B40cbX/26 +CKyR4xMOFdtccSsZVJkPewrTHKDF1hibh4isK53/mHeCUnrlzosoZn873ZallEFD +tgbnmfMfx+ILlraz5L5UqghMZp+v8UqGuFV8D2EOC0XyRcpCpqlkioflUmL1AHML +KBqLg28oKmF56wyGfZgygzTUt/5tWTehjNwn36Ro+ZKbDMy1topS6aw= +=ufxl +-----END PGP SIGNATURE----- diff --git a/torch-agent_0.0.1.orig.tar.xz b/torch-agent_0.0.1.orig.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..d37703ca6e43fc70415eeeaaa6482680310ed053 GIT binary patch literal 9788 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