Το Στέκι των Πληροφορικών

Γενικά => Τεχνική υποστήριξη => Linux => Μήνυμα ξεκίνησε από: alkisg στις 26 Οκτ 2009, 06:29:40 ΠΜ

Τίτλος: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: alkisg στις 26 Οκτ 2009, 06:29:40 ΠΜ
Περιγράφεται μια μέθοδος με την οποία μπορεί ο καθηγητής να συνδέεται χωρίς κωδικό πρόσβασης στο λογαριασμό οποιουδήποτε μαθητή, είτε στον τοπικό είτε σε απομακρυσμένους υπολογιστές, έτσι ώστε να μπορεί να εκτελεί μαζικές εντολές, να αντιγράφει αρχεία κτλ.
Αργότερα η μέθοδος θα αυτοματοποιηθεί με scripts.

1. Εγκατάσταση openssh-server
Σε όσους υπολογιστές θέλουμε να συνδεθούμε (δηλαδή και στους clients) θα πρέπει να έχει εγκατασταθεί ο openssh-server:
Κώδικας [Επιλογή]

sudo apt-get install openssh-server

Δεν χρειάζεται κάποια ειδική ρύθμιση.

2. Δημιουργία κλειδιού ssh
Από το λογαριασμό teacher στον server, εκτελούμε:
Κώδικας [Επιλογή]

ssh-keygen -f ~/.ssh/id_rsa -P ''


3. Να μην ελέγχεται η IP των clients
Κάθε φορά που συνδεόμαστε σε κάποιον υπολογιστή π.χ. client01.local, το ssh αποθηκεύει την IP του στο αρχείο ~/.ssh/known_hosts του λογαριασμού μας.
Εάν ο client01.local αλλάξει IP, το ssh δεν θα μας αφήσει να συνδεθούμε για λόγους ασφαλείας, και θα πρέπει να αφαιρέσουμε την παλιά IP του με την εντολή ssh-keygen -R client01.local για να μπορέσουμε να συνδεθούμε.
Επειδή οι clients παίρνουν δυναμικά IP από τον router, ο έλεγχος της IP δεν είναι επιθυμητός. Επομένως, τον απενεργοποιούμε δίνοντας:
Κώδικας [Επιλογή]

echo "CheckHostIP no" >> ~/.ssh/config
echo "StrictHostKeyChecking no" >> ~/.ssh/config


4. Αντιγραφή του κλειδιού στους απομακρυσμένους λογαριασμούς
Για κάθε λογαριασμό π.χ. a1 και για κάθε υπολογιστή π.χ. client01.local στον οποίο θέλουμε να συνδεόμαστε αυτόματα, δίνουμε:
Κώδικας [Επιλογή]

ssh-copy-id a1@client01.local

Μας ζητάει τον κωδικό του a1, τον εισάγουμε, και έτοιμοι.
(Ναι, οκ, είναι κουραστικό να το κάνουμε αυτό 120 φορές αν έχουμε 12 υπολογιστές και 10 τμήματα, ενώ είναι πιθανό να μην ξέρουμε καν τον κωδικό των μαθητών, γι' αυτό η διαδικασία αυτή θα αυτοματοποιηθεί. Επίσης το τελικό αρχείο /home/a1/.ssh/authorized_keys θα προστατευθεί με την chattr +i για να μην μπορεί να το διαγράψει ο μαθητής.)

5a. Δοκιμή σύνδεσης από τερματικό
Με
Κώδικας [Επιλογή]

ssh a1@client01.local ls

θα πρέπει να μπορείτε να δείτε τα αρχεία του χρήστη a1 στον client01.local, ενώ με σκέτο ssh a1@client01.local θα πρέπει να μπορείτε να συνδεθείτε χωρίς να σας ζητηθεί κωδικός.

5b. Δοκιμή αντιγραφής αρχείων από τερματικό, για μετέπειτα μαζικές εντολές
Δώστε για παράδειγμα την παρακάτω εντολή:
Κώδικας [Επιλογή]

gvfs-mount sftp://a1@client01.local

Θα πρέπει να εμφανιστεί στο ναυτίλο ο φάκελος του a1 στον client01.local χωρίς να ζητηθεί κωδικός.

Συνεχίστε τη δοκιμή με:
Κώδικας [Επιλογή]

gvfs-ls sftp://a1@client01.local/home/a1

Θα πρέπει να σας δείξει τα αρχεία του a1 στον client01.local.
Παρεμπιπτόντως, τα αρχεία του απομακρυσμένου υπολογιστή θα πρέπει να φαίνονται και στον τοπικό φάκελο "/home/teacher/.gvfs/sftp για a1 στο client01.local".

Τέλος, δοκιμάστε:
Κώδικας [Επιλογή]

echo "Δοκιμή" > /tmp/dokimi
gvfs-copy /tmp/dokimi sftp://a1@client01.local/home/a1


Θα πρέπει να δημιουργηθεί ένα δοκιμαστικό αρχείο, και να αντιγραφεί στον απομακρυσμένο χρήστη, θέτοντας αυτόματα τον απομακρυσμένο χρήστη ως ιδιοκτήτη του!

5c. Δοκιμή αντιγραφής αρχείων από το ναυτίλο
Αν στο ναυτίλο ανοίξετε π.χ. τρεις καρτέλες,
* Τα έγγραφά σας (/home/teacher/Έγγραφα),
* Τα έγγραφα του a1 στο client01.local (sftp://a1@client01.local/home/a1/Έγγραφα)
* Τα έγγραφα του a1 στο client02.local (sftp://a1@client02.local/home/a1/Έγγραφα)
θα πρέπει να μπορείτε να αντιγράφετε αρχεία μεταξύ τους, με το gvfs να θέτει αυτόματα τους κατάλληλους ιδιοκτήτες! Έχω την εντύπωση ότι αυτό, σε συνδυασμό με scriptάκια για μαζικό mount/unmount όλης της τάξης, είναι πιο βολικό από NFS! ;)
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: Δημήτρης Δαλαγιώργος στις 27 Οκτ 2009, 09:42:22 ΠΜ
Παράθεση από: alkisg στις 26 Οκτ 2009, 06:29:40 ΠΜ
4. Αντιγραφή του κλειδιού στους απομακρυσμένους λογαριασμούς
Για κάθε λογαριασμό π.χ. a1 και για κάθε υπολογιστή π.χ. client01.local στον οποίο θέλουμε να συνδεόμαστε αυτόματα, δίνουμε:
Κώδικας [Επιλογή]

ssh-copy-id a1@client01.local

Μας ζητάει τον κωδικό του a1, τον εισάγουμε, και έτοιμοι.
(Ναι, οκ, είναι κουραστικό να το κάνουμε αυτό 120 φορές αν έχουμε 12 υπολογιστές και 10 τμήματα, ενώ είναι πιθανό να μην ξέρουμε καν τον κωδικό των μαθητών, γι' αυτό η διαδικασία αυτή θα αυτοματοποιηθεί. Επίσης το τελικό αρχείο /home/a1/.ssh/authorized_keys θα προστατευθεί με την chattr +i για να μην μπορεί να το διαγράψει ο μαθητής.)

/usr/bin/ssh-copy-id: ERROR: No identities found

Άκυρο, δικό μου λάθος.
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: Δημήτρης Δαλαγιώργος στις 27 Οκτ 2009, 10:02:40 ΠΜ
Παράθεση από: alkisg στις 26 Οκτ 2009, 06:29:40 ΠΜ
Δώστε για παράδειγμα την παρακάτω εντολή:
Κώδικας [Επιλογή]

gvfs-mount sftp://a1@client01.local

Θα πρέπει να εμφανιστεί στο ναυτίλο ο φάκελος του a1 στον client01.local χωρίς να ζητηθεί κωδικός.

Σε μένα κάνει mount το filesystem του client01, όχι μόνο το home directory του (αντίστοιχου) a1
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: Δημήτρης Δαλαγιώργος στις 27 Οκτ 2009, 10:11:13 ΠΜ
Παράθεση από: alkisg στις 26 Οκτ 2009, 06:29:40 ΠΜ
5c. Δοκιμή αντιγραφής αρχείων από το ναυτίλο
Αν στο ναυτίλο ανοίξετε π.χ. τρεις καρτέλες,
* Τα έγγραφά σας (/home/teacher/Έγγραφα),
* Τα έγγραφα του a1 στο client01.local (sftp://a1@client01.local/home/a1/Έγγραφα)
* Τα έγγραφα του a1 στο client02.local (sftp://a1@client02.local/home/a1/Έγγραφα)
θα πρέπει να μπορείτε να αντιγράφετε αρχεία μεταξύ τους, με το gvfs να θέτει αυτόματα τους κατάλληλους ιδιοκτήτες! Έχω την εντύπωση ότι αυτό, σε συνδυασμό με scriptάκια για μαζικό mount/unmount όλης της τάξης, είναι πιο βολικό από NFS! ;)

Υπάρχει τρόπος ν' ανοίγει ο ναυτίλος κατευθείαν με 12 καρτέλες, μία για κάθε μηχάνημα/user ώστε να μη χρειάζεται να ανοίγω τις καρτέλες με το χέρι;
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: alkisg στις 27 Οκτ 2009, 10:32:49 ΠΜ
Παράθεση από: Δημήτρης Δαλαγιώργος στις 27 Οκτ 2009, 10:11:13 ΠΜ
Υπάρχει τρόπος ν' ανοίγει ο ναυτίλος κατευθείαν με 12 καρτέλες, μία για κάθε μηχάνημα/user ώστε να μη χρειάζεται να ανοίγω τις καρτέλες με το χέρι;

Αυτή τη στιγμή όχι, γι' αυτό και είπα για nautilus extension. Υπάρχει όμως μια προτεινόμενη ιδέα (http://brainstorm.ubuntu.com/idea/15006/) σαν τα πολλαπλά bookmarks του firefox, αν υλοποιηθεί θα μας γλυτώσει από τον κόπο του extension.

Προς στιγμή, μπορούν είτε να μπουν σε bookmarks και να ανοίγουμε από το μενού αυτά που θέλουμε ένα ένα,
ή να κάνουμε ένα μικρό script που να καλεί το gvfs-mount για όλους τους clients, ώστε να τα βγάζει στη στήλη δέντρο στα αριστερά του Ναυτίλου. Αυτό θα είναι και το πρώτο που θα υλοποιήσουμε σε script, για τα υπόλοιπα βλέπουμε αργότερα.
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: alkisg στις 02 Νοε 2009, 09:31:02 ΠΜ
Για να μπορούμε να εκτελούμε διαχειριστικές εργασίες στους clients χωρίς sudo:

Στο βήμα 4, που κάνουμε
Κώδικας [Επιλογή]
ssh-copy-id a1@client01.local
ουσιαστικά αντιγράφουμε το τοπικό αρχείο /home/teacher/.ssh/id_rsa.pub
στο απομακρυσμένο αρχείο /home/a1/.ssh/authorized_keys

Για να κάνουμε το ίδιο για το απομακρυσμένο /root, συνδεόμαστε σαν teacher στους clients, είτε σε έναν - έναν χωριστά είτε σε όλους ταυτόχρονα με το clusterssh, και δίνουμε τις παρακάτω εντολές:
Κώδικας [Επιλογή]

sudo scp teacher@server.local:.ssh/id_rsa.pub /root/.ssh/authorized_keys
sudo chmod 600 /root/.ssh/authorized_keys


Πλέον, από τον server μπορούμε για παράδειγμα να δώσουμε:
Κώδικας [Επιλογή]

ssh root@client01.local rm -rf /home/a1/.mozilla

για να διαγράψουμε τελείως τις ρυθμίσεις, τα bookmarks και την cache του firefox για τον χρήστη a1 στο pc client01, χωρίς να μας ζητήσει κωδικό κτλ.

Εννοείται ότι μπορούμε να χρησιμοποιήσουμε τη δυνατότητα εκτέλεσης διαχειριστικών εργασιών χωρίς sudo και μέσα από το clusterssh: απλά του λέμε να συνδεθεί ως root@clientXX.local αντί για a1@clientXX.local.
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: alkisg στις 01 Φεβ 2010, 12:26:44 ΜΜ
"Βελτίωσα" την παραπάνω μέθοδο και την κατέγραψα στο αγγλικό wiki:
https://help.ubuntu.com/community/UbuntuLTSP/PasswordlessSSH

Τα νέα sch-scripts (http://wiki.ubuntu-gr.org/sch-scripts/screenshots) θα εφαρμόζουν αυτήν την παραλλαγή του passwordless ssh από προεπιλογής σε thin και fat clients. Έτσι, θα είναι πανεύκολος ο απομακρυσμένος χειρισμός τους (login, logout, reboot, shutdown κτλ).
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: odysseas στις 23 Φεβ 2010, 09:03:28 ΜΜ
στο εργαστήριό μου τα μηχανήματα είναι standalone, με ubuntu 9.10.

ας υποθέσουμε ότι ο βασικός λογαριασμός στον server είναι ο lab-admin, ενώ στα μηχανήματα θέλουμε να συνδεόμαστε με ssh ως student (στον οποίο επιτρέπεται να τρέξει το sudo για να εκτελέσει τοπικές διαχειριστικές εργασίες).

Παράθεση από: alkisg στις 26 Οκτ 2009, 06:29:40 ΠΜ
Κώδικας [Επιλογή]

ssh-keygen -f ~/.ssh/id_rsa -P ''
ssh-copy-id student@client01.local


η παραπάνω μέθοδος δουλεύει μια χαρά, με την έννοια ότι το ssh και το cluster-ssh συνδέονται χωρίς να ζητείται κωδικός.
ωστόσο, εντολές που απαιτούν sudo ζητούν κωδικό, παρόλο που έχω κάνει τα παρακάτω:

Παράθεση από: alkisg στις 02 Νοε 2009, 09:31:02 ΠΜ

Για να κάνουμε το ίδιο για το απομακρυσμένο /root, συνδεόμαστε σαν teacher student στους clients, είτε σε έναν - έναν χωριστά είτε σε όλους ταυτόχρονα με το clusterssh, και δίνουμε τις παρακάτω εντολές:
Κώδικας [Επιλογή]

sudo scp lab-admin@server.local:.ssh/id_rsa.pub /root/.ssh/authorized_keys
sudo chmod 600 /root/.ssh/authorized_keys


έχουμε καμιά ιδέα τί θα μπορούσε να φταίει;
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: alkisg στις 23 Φεβ 2010, 09:10:24 ΜΜ
Μετά από τις παραπάνω ενέργειες, ΔΕΝ κάνεις sudo. Συνδέεσαι απευθείας ως root, για παράδειγμα:
Κώδικας [Επιλογή]

ssh root@client01.local poweroff
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: odysseas στις 23 Φεβ 2010, 11:25:23 ΜΜ
ευχαριστώ πολύ για την απάντηση.

πρόκειται για παρανόηση -- το να συνδέομαι οπουδήποτε ως root στο ubuntu είναι κάτι που δεν το έχω συνηθίσει με αποτέλεσμα να παρερμηνεύσω τελείως τις οδηγίες.

βέβαια απ' όσο θυμάμαι η απευθείας σύνδεση ως root είναι by default απενεργοποιημένη, αλλά θα πρέπει να το δοκιμάσω στο εργαστήριο για να δω αν θα υπάρξει πρόβλημα.
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: alkisg στις 23 Φεβ 2010, 11:35:10 ΜΜ
Παράθεση από: odysseas στις 23 Φεβ 2010, 11:25:23 ΜΜ
βέβαια απ' όσο θυμάμαι η απευθείας σύνδεση ως root είναι by default απενεργοποιημένη...

Ναι, ο root δεν έχει κωδικό και έτσι δεν μπορεί κάποιος να συνδεθεί με κωδικό. Αλλά το passwordless ssh δεν θέλει κωδικούς! ;)

Όλα αυτά είναι πλήρως αυτοματοποιημένα με τους fat clients και τα sch-scripts, δηλαδή ο διαχειριστής δεν χρειάζεται να κάνει τίποτα από τα παραπάνω, το root ssh είναι στημένο από προεπιλογής.

Όποιος θέλει δοκιμάζει να ακολουθήσει τις οδηγίες εγκατάστασης,
  http://wiki.ubuntu-gr.org/sch-scripts/Εγκατάσταση (http://wiki.ubuntu-gr.org/sch-scripts/%CE%95%CE%B3%CE%BA%CE%B1%CF%84%CE%AC%CF%83%CF%84%CE%B1%CF%83%CE%B7)
και δίνει ανατροφοδότηση για ό,τι του λείπει ώστε να τα βρουν έτοιμα όσοι βάλουν το Ubuntu 10.04 τον Απρίλη που θα βγει επίσημα.
Τίτλος: Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
Αποστολή από: Δημήτρης Δαλαγιώργος στις 27 Σεπ 2010, 02:08:30 ΜΜ
Για να κάνω το ανάποδο τι χρειάζεται;

Π.χ. θέλω ν' αντιγράψω στον server όλες τις εργασίες των παιδιών. Δίνω κάτι σαν:

Κώδικας [Επιλογή]
sudo find /home/ -name '*.odt' -execdir scp '{}' localadm@server.local:/tmp/finished/ ';'

ώστε να βρει όλα τα αρχεία του Writer και να τα αντιγράψει στον server στο φάκελο /tmp/finished. Κάθε φορά που βρίσκει ένα αρχείο και θέλει να το αντιγράψει μου ζητάει το password του localadm στον server. Μπορώ να το αλλάξω αυτό;