LinuxFanClub Wiki

Υπηρεσίες, Προγραμματισμός, Εκπαίδευση ..

User Tools

Site Tools


el:linux:debian:server:ssh

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

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

Πηγές

el/linux/debian/server/ssh.txt · Last modified: Y/m/d H:i by vagk