Nachrichten per Signal von der Kommandozeile versenden

Mit der Anwendung signal-cli lassen sich Nachrichten von der Kommandozeile über Signal versenden.

Bei Signal handelt es sich um einen freien und verschlüsselnden Messenger. Die Entwicklung wird durch die Signal Technology Foundation vorangetrieben und aus Spenden finanziert.

Bei dem Tool signal-cli handelt es sich um eine Open Source Anwendung, die jedoch nicht durch die Autoren des Messenger entwickelt wird. Die Anwendung ist in der Programmiersprache Java geschrieben und nutzt die offiziellen Bibliotheken.

Installation

Zum Zeitpunkt als der Artikel geschrieben wurde ist die aktuelle Version 0.6.5 und sie lässt sich als kompilierte Version direkt von GitHub beziehen.

$ mkdir signal
$ cd signal 
$ wget https://github.com/AsamK/signal-cli/releases/download/v0.6.5/signal-cli-0.6.5.tar.gz

War der Download erfolgreich, kann das Archiv entpackt werden.

$ tar -xvf signal-cli-0.6.5.tar.gz 
signal-cli-0.6.5/
signal-cli-0.6.5/lib/
signal-cli-0.6.5/lib/signal-cli-0.6.5.jar
signal-cli-0.6.5/lib/signal-service-java-2.13.9_unofficial_1.jar
signal-cli-0.6.5/lib/bcprov-jdk15on-1.64.jar
signal-cli-0.6.5/lib/argparse4j-0.8.1.jar
signal-cli-0.6.5/lib/dbus-java-2.7.0.jar
signal-cli-0.6.5/lib/signal-metadata-java-0.0.3.jar
signal-cli-0.6.5/lib/signal-protocol-java-2.7.1.jar
signal-cli-0.6.5/lib/protobuf-java-2.5.0.jar
signal-cli-0.6.5/lib/libphonenumber-8.10.7.jar
signal-cli-0.6.5/lib/jackson-databind-2.9.9.2.jar
signal-cli-0.6.5/lib/okhttp-3.12.1.jar
signal-cli-0.6.5/lib/threetenbp-1.3.6.jar
signal-cli-0.6.5/lib/unix-0.5.1.jar
signal-cli-0.6.5/lib/jackson-annotations-2.9.0.jar
signal-cli-0.6.5/lib/jackson-core-2.9.9.jar
signal-cli-0.6.5/lib/okio-1.15.0.jar
signal-cli-0.6.5/lib/debug-1.1.1.jar
signal-cli-0.6.5/lib/hexdump-0.2.1.jar
signal-cli-0.6.5/lib/curve25519-java-0.5.0.jar
signal-cli-0.6.5/bin/
signal-cli-0.6.5/bin/signal-cli.bat
signal-cli-0.6.5/bin/signal-cli
$ cd signal-cli-0.6.5/bin 

Damit die Software gestartet werden kann muss eine Java Umgebung wie zum Beispiel OpenJDK installiert sein. Ist dies der Fall kann die ANwendung wie folgt aufgerufen werden und zeigt bereits ein paar verfügbare Unterkommandos und Parameter an.

$ ./signal-cli
Benutzung: signal-cli [-h] [-v] [--config CONFIG] [-u USERNAME | --dbus | --dbus-system]
                      {trust,receive,sendContacts,updateProfile,listIdentities,link,unregister,updateGroup,quitGroup,listDevices,removeDevice,updateAccount,daemon,setPin,addDevice,listGroups,verify,updateContact,send,removePin,register}
                      ...
signal-cli: Fehler: zu wenig Argumente

Registrieren

In den folgenden Beispielen wird die Telefonnummer +49111 für den Client und die Telefonnummer +49222 für einen Partner mit einem Mobiltelefon verwendet.

Damit die Anwendung verwendet werden kann, muss eine Telefonnummer registriert werden. Es muss jedoch darauf geachtet werden, dass die Nummer eine SMS empfangen und diese auch abgerufen werden kann.

$ ./signal-cli -u +49111 register

Nach wenigen Augenblicken sollte eine SMS mit dem Code zur Verifizierung eintreffen. Mit diesem muss die Telefonnummer bestätigt werden.

$ ./signal-cli -u +49111 verify 123-456

Nachricht senden/empfangen

War die Registrierung erfolgreich und ist die Nummer verifiziert, dann kann eine Nachricht an einen anderen Teilnehmer versendet werden.

$ ./signal-cli -u +491111 send -m "test" +49222

Es ist auch möglich die Ausgabe eines Programms direkt als Nachricht zu versenden.

$ uname -a | ./signal-cli -u +49111 send +49222

Sollen andere Teilnehmer auch auf Nachrichten Antworten, dann ist es wichtig die Nachrichten von Zeit zu Zeit abzurufen. Dies kann wie folgt durchgeführt werden.

$ ./signal-cli -u +49111 receive
Envelope from:  (device: 0)
Timestamp: 1581555670523 (2020-02-13T01:01:10.523Z)
Sent by unidentified/sealed sender
Sender: +49222 (device: 1)
Message timestamp: 1581555670523 (2020-02-13T01:01:10.523Z)
Body: Test
Profile key update, key length:32

Um die Verarbeitung der Nachrichten zu erleichtern, kann die Rückgabe auch als JSON erfolgen. Dabei wird eine Nachricht als Abgeschlossener JSON String pro Zeile ausgegeben.

$ ./signal-cli -u +49111 receive --json
{"envelope":{"source":"+49222","sourceDevice":1,"relay":null,"timestamp":1581555769855,"isReceipt":false,"dataMessage":{"timestamp":1581555769855,"message":"Test","expiresInSeconds":0,"attachments":[],"groupInfo":null},"syncMessage":null,"callMessage":null,"receiptMessage":null}}

Trusted

Um die Sicherheit zu erhöhen sollten die Sicherheitsnummer mit Kontakten verglichen und bei Übereinstimmung auf "trusted" gesetzt werden.

Eine Liste aller Kontakte inklusive der Sicherheitsnummer kann wie folgt angezeigt werden.

$ ./signal-cli -u +49111 listIdentities
+49222: TRUSTED_UNVERIFIED Added: Thu Feb 13 02:00:23 CET 2020 Fingerprint: 12 34 .. .. 67 89  Safety Number: 1234 .... 5678

Stimmt die Sicherheitsnummer überein, kann sie wie folgt bestätigt werden.

$ ./signal-cli -u +49111 trust -v '1234 .... 5678' +49222

War alles erfolgreich sollte der Kontakt als TRUSTED_VERIFIED angezeigt werden.

$ ./signal-cli -u +49111 listIdentities
+49222: TRUSTED_VERIFIED Added: Thu Feb 13 02:00:23 CET 2020 Fingerprint: 12 34 .. .. 67 89  Safety Number: 1234 .... 5678

Fazit

Das Tool signal-cli erlaubt es Nachrichten aus Skripten etc. zu versenden und ermöglicht damit einen weiteren Weg Nachrichten schnell an Mobiltelefone zu senden. Die Möglichkeit Nachrichten zu empfangen und zu verarbeiten erlaubt auch einen gewissen Grad der Interaktion in Form eines Bot oder ähnlichem. Bei den aktuellen Tests ist jedoch negativ aufgefallen, dass ein Aufruf des Programms eine relativ hohe CPU Last erzeugt und Teilweise mehrere Sekunden braucht bis das Programm wieder beendet ist.

Links

Verwandte Artikel