====== SSH - Ασφαλής απομακρυσμένη σύνδεση σε γραμμή εντολών ====== ===== Εγκατάσταση ===== aptitude install ssh openssh-server ===== Ρύθμιση Server ===== Στην προκαθορισμένη του ρύθμιση ο server δουλεύει αρκετά καλά. Θα δούμε κάποιες από τις επιλογές στο αρχείο /etc/ssh/sshd_config που ίσως χρειαστεί να αλλάξουμε Για ασφάλεια μπορούμε να απενεργοποιήσουμε την απομακρυσμένη σύνδεση ως root PermitRootLogin no Και να ορίσουμε ακριβώς ποιοι χρήστες θα μπορούν να συνδέονται, είτε άμεσα AllowUsers root vagelis manos είτε έμμεσα AllowGroups specialssh προσθέτωντας στην συνέχεια τους χρήστες που θέλουμε σε αυτό το group addgroup specialssh adduser vagelis specialssh Εάν θέλουμε σύνδεση με κλειδί (περιγράφεται παρακάτω) PubkeyAuthentication yes Για λόγους ασφαλείας καλό είναι να αλλάξουμε την προκαθορισμένη θύρα που ακούει ο ssh server. Εάν έχουμε κάποιον firewall, είναι καλύτερα να κάνουμε mapping από αυτόν, μιας εξωτερικής θύρας διαφορετικής από 22, στην εσωτερική θύρα 22. Έτσι αποφεύγουμε επιπλέον ρυθμίσεις στον server. ==== Permit ssh logins ==== Πλέον η προκαθορίσμένη ρύθμιση σύνδεσης του χρήστη root μέσω ssh είναι PermitRootLogin without-password Που σημαίνει σύνδεση root μονο με κλειδιά. Ακόμα και να την αφήσουμε έτσι, την πρώτη φορά πρέπει να συνδεθούμε κανονικά. sudo vi /etc/ssh/sshd_config και ορίζουμε PermitRootLogin yes επανεκκινούμε το ssh sudo service ssh restart ===== Ρύθμιση Client ===== Συνδυάζοντας όλα τα παρακάτω μπορούμε αντί να εκτελούμε ssh testuser@myserver -p 11111 και να μας ζητείται κωδικός, απλά να συνδεόμαστε ως testuser τοπικά και να εκτελούμε myserver Επίσης όλα τα παρακάτω είναι πολύ χρήσιμα για την εκτέλεση μεταφορών μέσω scp χωρίς κωδικό και για κατευθείαν εκτέλεση απομακρυσμένων εντολών απλά π.χ. ως myserver /etc/init.d/apache2 restart ==== Σύνδεση με κλειδί ==== Για να μπορούμε να συνδεόμαστε χωρίς να δίνουμε κωδικό κάθε φορά, μπορούμε να ρυθμίσουμε σύστημα σύνδεσης με κλειδί το οποίο θα ρυθμίσουμε μία μόνο φορά. Αυτή η ρύθμιση είναι απαραίτητη σε περίπτωση που έχουμε scripts που συνδέονται αυτόματα στον server, για λόγους backup, cvs client κτλ Συνδεόμαστε λοιπόν στην κονσόλα ως ο απλός χρήστης και εκτελούμε. Προσοχή δεν θα δόσουμε passphrase (Θα το αφήσουμε κενό) ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/vagelis/.ssh/id_dsa): /home/vagelis/.ssh/id_dsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/vagelis/.ssh/id_dsa. Your public key has been saved in /home/vagelis/.ssh/id_dsa.pub. The key fingerprint is: aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa vagelis@localhost Στον απομακρυσμένο υπολογιστή θα πρέπει να υπάρχει ο φάκελος /home/username/.ssh/, οπότε εκτελούμε για κάθε ενδεχόμενο ssh username@yourdomain.com "mkdir ~/.ssh/" Στην συνέχεια προσθέτουμε το δημόσιο κλειδί με cat ~/.ssh/id_dsa.pub | ssh username@yourdomain.com "cat - >>~/.ssh/authorized_keys" Τέλος δοκιμάζουμε την σύνδεση ssh username@yourdomain.com Αν η ρύθμιση έχει γίνει σωστά θα πρέπει να συνδεθούμε χωρίς να μας ζητηθεί κωδικός Εάν θέλουμε να προσθέσουμε και άλλον υπολογιστή εκτελούμε πάλι μόνο την τελευταία εντολή cat ~/.ssh/id_dsa.pub | ssh username@yourotherdomain.com "cat - >>~/.ssh/authorized_keys" ssh username@yourotherdomain.com ==== Σύνδεση χωρίς εμφάνιση της εντολής ssh ==== Εκτέλώντας την παρακάτω εντολή ln -s /usr/bin/ssh-argv0 /usr/bin/myserver Μπορούμε εάν έχουμε ενεργοποιήσει την σύνδεση χωρίς κώδικα και ενώ είμαστε συνδεδεμένοι ως χρήστης testuser .. να εκτελούμε myserver και να εισερχόμαστε ως testuser. Ομοίως εάν είμαστε χρήστης root συνδεόμαστε ως χρήστης root. ==== Σύνδεση σε άλλη θύρα ==== Η σύνδεση σε άλλη θύρα μπορεί να γίνει με έναν πολύ γενικό τρόπο προς όλες τις εφαρμογές που χρησιμοποιούν ssh, ώστε εάν αποφασίσουμε να την ξανααλλάξουμε να κάνουμε την αλλαγή κεντρικά και όχι σε κάθε client εφαρμογή. Έστω λοιπόν ότι συνδεόμαστε στο mydomain.com στην θύρα 11111 πλέον και όχι στην 22. Προσθέτουμε για όλους τους χρήστες στο αρχείο /etc/ssh/ssh_config ή μόνο για εμάς στο αρχείο ~/.ssh/.config (το δημιουργούμε εάν δεν υπάρχει), τα παρακάτω Host mydomain Hostname mydomain.com Port 11111 Τώρα θα μπορούμε να συνδεόμαστε κανονικά στην νέα θύρα απλώς εκτελώντας ssh user@mydomain ==== Μη ασφαλής σύνδεση ==== Μερικές φορές για πρακτικούς λόγους είμαστε αναγκασμένοι να παρακάμψουμε την ενσωματωμένη ασφάλεια του ssh. Για παράδειγμα ο απομακρυσμένος υπολογιστής έχει 2 λειτουργικά με ενεργοποιημένη την ssh σύνδεση. την πρώτη φορά που συνδεόμαστε στο ένα από τα δύο αποθηκεύεται στο αρχείο .ssh/known_hosts πληροφορία για την σύνδεση. Κατά την σύνδεσή μας στο 2ο μας εμφανίζεται μήνυμα ότι ο υπολογιστής που πάμε να συνδεθούμε δεν είναι αυτός που γνωρίζουμε ήδη @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ .. Για να παρακάμψουμε τον έλεγχο αυτό μπορούμε να εκτελέσουμε την παρακάτω εντολή για να συνδεθούμε στον υπολογιστή 192.168.1.10 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 192.168.1.10 Εάν θέλουμε να περάσουμε και τον κώδικό, (ακόμα πιο ανασφαλές αλλά χρήσιμο σε κάποιο script), χρησιμοποιούμε την εντολή sshpass sshpass -p 1234 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 192.168.1.10 Οι παραπάνω ανασφαλείς θα πρέπει να χρησιμοποιούνται μόνο εφόσον είναι άκρως αναγκαίο και πάντα σε τοπικό δίκτυο. ==== backdoor ssh σύνδεση πίσω από firewall ==== (βλ. trick5 στο http://www.ibm.com/developerworks/linux/library/l-10sysadtips/) ===== ssh tunnel ===== Για να περάσουμε δεδομένα με κρυπτογράφηση όταν προκαθορισμένα περνάνε χωρίς (βλ. mysql, vnc ..) μια λύση είναι εδώ : http://www.brandonchecketts.com/archives/creating-a-permanent-ssh-tunnel-between-linux-servers ====== screen - Προχωρημένο απομακρυσμένο τερματικό ====== ===== Διαμοιρασμός προβολής τερματικού ===== Συνδεόμαστε σε έναν υπολογιστή που είναι ήδη συνδεδεμένος και ένας άλλος χρήστης (με το ίδιο username) μέσω ssh Εκτελούμε screen -S foo Ο άλλος χρήστης εκτελεί screen -x foo Πλεον βλέπουμε και οι δύο την ίδια οθόνη και πληκτρολογούμε και οι δύο σε αυτήν Για να αποσυνδεθεί ο ένας από εμάς πατάει CTRL-A και CTRL-d Για να ξανασυνδεθεί εκτελεί screen -x foo ====== Πηγές ====== * screen : http://www.ibm.com/developerworks/linux/library/l-10sysadtips/index.html?ca=drs-#T3 * permanent ssh tunnel : http://www.brandonchecketts.com/archives/creating-a-permanent-ssh-tunnel-between-linux-servers