Στο σημερινό άρθρο θα δούμε πως μπορούμε να μεταφέρουμε audio μέσω μιας σύνδεσης ssh με απομακρυσμένο server.
Παρόλο που η χρήση της σύνδεσης μέσω ssh χρησιμοποιείται συνήθως για απομακρυσμένη διαχείριση κάποιου υπολογιστή η διακομιστή, υπάρχουν όμως περιπτώσεις που το χρησιμοποιούν κάποιοι για X fordwarding (απομακρυσμένη σύνδεση με επιφάνεια εργασίας) ενώ ακόμα πιο λιγότεροι είναι αυτοί που το κάνουν σωστά το X forwarding:
ssh -Y user@hostname
Σε αυτό το άρθρο δεν θα ασχοληθούμε με αυτό, αλλά με κάτι που ακόμα πιο λίγοι άνθρωποι κάνουν… να μεταφέρουν audio μέσα από μία κρυπτογραφημένη σύνδεση :P
Για τις δοκιμές σας, μπορείτε να χρησιμοποιήσετε ενα VirtualBox με εγκατεστημένο Ubuntu Server 14.04
SSH audio forwarding: Βήμα 1 – Encoding
Σε πρώτη φάση θα κάνουμε encoding ένα *.wav αρχείο ήχου χρησιμοποιώντας το ogg. Γιατί να το κάνουμε αυτό; Γιατί το ogg αρχείο είναι μικρότερο σε μεγεθος και θα μεταφερθεί πιο γρήγορα, μέσω internet, από ότι ένα wav αρχείο.
Αφού συνδεθείτε μέσω ssh στον server σας (ή στο VM σας) κατεβάστε ένα *.wav αρχείο ήχου από το Internet (έχει κάτι ωραία ο Duke Nukem :P) πχ:
wget http://www.wavsource.com/snds_2015-02-22_2812738926347607/video_games/duke/clean-up.wav
Για να το μετατρέψουμε σε ogg φορμά, θα πρέπει πρώτα να εγκαταστήσουμε το απαραίτητο εργαλείο oggenc το οποίο παρέχεται από το vorbis-tools. Σε Ubuntu/Debian/Mint το κάνετε εγκατάσταση ως εξής:
sudo apt install vorbis-tools
Αφού γίνει η εγκατάσταση, κάντε το αρχείο που κατεβάσατε, encode χρησιμοποιώντας τον ogg encoder:
oggenc file.wav
Το output θα είναι κάπως ετσι:
The file sound will be converted into *.ogg format and it will also be smaller in size. Opening with wav module: WAV file reader Encoding "clean-up.wav" to "clean-up.ogg" at quality 3.00 [ 66.1%] [ 0m00s remaining] | Done encoding file "clean-up.ogg" File length: 0m 02.0s Elapsed time: 0m 00.0s Rate: 51.6728 Average bitrate: 24.8 kb/s
SSH audio forwarding: Βήμα 2 – Decoding
Σε δεύτερη φάση, θα πρέπει ο server από τον οποίο θέλετε να στριμάρετε το αρχείο, να μπορεί να αναπαράγει το αρχείο. Δηλαδή αν το μηχάνημα δεν έχει καν audio device, μην το δοκιμάσει κανείς και μετά γκρινιάζει γιατί δεν δουλεύει. Επίσης, αν το δοκιμάσετε σε VM, τότε δώστε virtual audio device «AC97» (με αυτήν το τέσταρα και δουλεύει).
Στην συνέχεια πρέπει να ρυθμίσουμε με έναν κειμενογράφο ώστε τα vorbis-tools να χρησιμοποιούν ALSA από προεπιλογή (αντί του pulse audio).
vim /etc/libao.conf default_driver = alsa
Αφού αποθηκεύσετε, δοκιμάστε να παίξετε το αρχείο:
ogg123 clean-up.ogg
Προφανώς δεν θα ακούσετε κάτι, αλλά θα δείτε το εξής output:
Playing: - Ogg Vorbis stream: 1 channel, 8000 Hz
SSH audio forwarding: Βήμα 3 – Streaming
Αν φτάσατε μέχρι εδώ σημαίνει ότι ο παραπάνω server μπορεί να παίξει το αρχείο ήχου (clean-up.ogg στην περίπτωση μου) χρησιμοποιώντας ALSA χωρίς κανένα πρόβλημα. Τώρα όσο για να το ακούσουμε και εμείς από το δικό μας local μηχάνημα, δίνουμε τα εξής:
ssh user@hostname 'cat /path/to/file.ogg' | ogg123 -
Σημείωση: πετάξτε το σε κάνα MOTD, ή ηχογραφείστε τον εαυτό σας και να ακούγεται μόλις κάνει ο άλλος SSH Login :P
«ενώ ακόμα πιο λιγότεροι είναι αυτοί που το κάνουν σωστά το X forwarding:
ssh -Y user@hostname»
Κι εγώ νόμιζα ότι το -Y σήμαινε κάτι σε «κρυπτογραφημένο», αλλά από ότι κατάλαβα σημαίνει ακριβώς το ανάποδο. Με το -Y *παρακάμπτονται* κάποιοι έλεγχοι ασφαλείας, για λόγους συμβατότητας και όταν ο server είναι «έμπιστος».
Ορθώς το X-Forwarding είναι «opt-in», καθώς (υποτίθεται τουλάχιστον) ότι υπάρχει δυνατότητα κάποιος που έχει έλεγχο του server να υποκλέψει πχ τι γράφει κάποιος στον client.
Να ήταν μόνο αυτό:P Ευτυχώς τουλάχιστον όλα γίνονται μέσω ssh… και δεν έχουμε πλέον telnet :P xixixix