aptitude install ssh openssh-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.
Πλέον η προκαθορίσμένη ρύθμιση σύνδεσης του χρήστη root μέσω ssh είναι
PermitRootLogin without-password
Που σημαίνει σύνδεση root μονο με κλειδιά. Ακόμα και να την αφήσουμε έτσι, την πρώτη φορά πρέπει να συνδεθούμε κανονικά.
sudo vi /etc/ssh/sshd_config
και ορίζουμε
PermitRootLogin yes
επανεκκινούμε το ssh
sudo service ssh restart
Συνδυάζοντας όλα τα παρακάτω μπορούμε αντί να εκτελούμε
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
Εκτέλώντας την παρακάτω εντολή
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
Οι παραπάνω ανασφαλείς θα πρέπει να χρησιμοποιούνται μόνο εφόσον είναι άκρως αναγκαίο και πάντα σε τοπικό δίκτυο.
(βλ. trick5 στο http://www.ibm.com/developerworks/linux/library/l-10sysadtips/)
Για να περάσουμε δεδομένα με κρυπτογράφηση όταν προκαθορισμένα περνάνε χωρίς (βλ. mysql, vnc ..) μια λύση είναι εδώ : http://www.brandonchecketts.com/archives/creating-a-permanent-ssh-tunnel-between-linux-servers
Συνδεόμαστε σε έναν υπολογιστή που είναι ήδη συνδεδεμένος και ένας άλλος χρήστης (με το ίδιο username) μέσω ssh
Εκτελούμε
screen -S foo
Ο άλλος χρήστης εκτελεί
screen -x foo
Πλεον βλέπουμε και οι δύο την ίδια οθόνη και πληκτρολογούμε και οι δύο σε αυτήν
Για να αποσυνδεθεί ο ένας από εμάς πατάει CTRL-A και CTRL-d Για να ξανασυνδεθεί εκτελεί
screen -x foo