Αποστολέας Θέμα: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)  (Αναγνώστηκε 3076 φορές)

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5433
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Περιγράφεται μια μέθοδος με την οποία μπορεί ο καθηγητής να συνδέεται χωρίς κωδικό πρόσβασης στο λογαριασμό οποιουδήποτε μαθητή, είτε στον τοπικό είτε σε απομακρυσμένους υπολογιστές, έτσι ώστε να μπορεί να εκτελεί μαζικές εντολές, να αντιγράφει αρχεία κτλ.
Αργότερα η μέθοδος θα αυτοματοποιηθεί με 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! ;)

Δημήτρης Δαλαγιώργος

  • Πληροφορικός Πανεπιστημίου Αθηνών
  • Πληροφορικοί Δυτικής Μακεδονίας
  • *
  • Μηνύματα: 376
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #1 στις: 27 Οκτ 2009, 09:42:22 πμ »
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

Άκυρο, δικό μου λάθος.
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

Δημήτρης Δαλαγιώργος

  • Πληροφορικός Πανεπιστημίου Αθηνών
  • Πληροφορικοί Δυτικής Μακεδονίας
  • *
  • Μηνύματα: 376
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #2 στις: 27 Οκτ 2009, 10:02:40 πμ »
Δώστε για παράδειγμα την παρακάτω εντολή:
Κώδικας: [Επιλογή]
gvfs-mount sftp://a1@client01.local
Θα πρέπει να εμφανιστεί στο ναυτίλο ο φάκελος του a1 στον client01.local χωρίς να ζητηθεί κωδικός.

Σε μένα κάνει mount το filesystem του client01, όχι μόνο το home directory του (αντίστοιχου) a1
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

Δημήτρης Δαλαγιώργος

  • Πληροφορικός Πανεπιστημίου Αθηνών
  • Πληροφορικοί Δυτικής Μακεδονίας
  • *
  • Μηνύματα: 376
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #3 στις: 27 Οκτ 2009, 10:11:13 πμ »
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 ώστε να μη χρειάζεται να ανοίγω τις καρτέλες με το χέρι;
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5433
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #4 στις: 27 Οκτ 2009, 10:32:49 πμ »
Υπάρχει τρόπος ν' ανοίγει ο ναυτίλος κατευθείαν με 12 καρτέλες, μία για κάθε μηχάνημα/user ώστε να μη χρειάζεται να ανοίγω τις καρτέλες με το χέρι;

Αυτή τη στιγμή όχι, γι' αυτό και είπα για nautilus extension. Υπάρχει όμως μια προτεινόμενη ιδέα σαν τα πολλαπλά bookmarks του firefox, αν υλοποιηθεί θα μας γλυτώσει από τον κόπο του extension.

Προς στιγμή, μπορούν είτε να μπουν σε bookmarks και να ανοίγουμε από το μενού αυτά που θέλουμε ένα ένα,
ή να κάνουμε ένα μικρό script που να καλεί το gvfs-mount για όλους τους clients, ώστε να τα βγάζει στη στήλη δέντρο στα αριστερά του Ναυτίλου. Αυτό θα είναι και το πρώτο που θα υλοποιήσουμε σε script, για τα υπόλοιπα βλέπουμε αργότερα.

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5433
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #5 στις: 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.

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5433
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #6 στις: 01 Φεβ 2010, 12:26:44 μμ »
"Βελτίωσα" την παραπάνω μέθοδο και την κατέγραψα στο αγγλικό wiki:
https://help.ubuntu.com/community/UbuntuLTSP/PasswordlessSSH

Τα νέα sch-scripts θα εφαρμόζουν αυτήν την παραλλαγή του passwordless ssh από προεπιλογής σε thin και fat clients. Έτσι, θα είναι πανεύκολος ο απομακρυσμένος χειρισμός τους (login, logout, reboot, shutdown κτλ).

odysseas

  • Ομάδα διαγωνισμάτων 2011
  • *
  • Μηνύματα: 842
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #7 στις: 23 Φεβ 2010, 09:03:28 μμ »
στο εργαστήριό μου τα μηχανήματα είναι standalone, με ubuntu 9.10.

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

Κώδικας: [Επιλογή]
ssh-keygen -f ~/.ssh/id_rsa -P ''
ssh-copy-id student@client01.local

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


Για να κάνουμε το ίδιο για το απομακρυσμένο /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

έχουμε καμιά ιδέα τί θα μπορούσε να φταίει;

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5433
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #8 στις: 23 Φεβ 2010, 09:10:24 μμ »
Μετά από τις παραπάνω ενέργειες, ΔΕΝ κάνεις sudo. Συνδέεσαι απευθείας ως root, για παράδειγμα:
Κώδικας: [Επιλογή]
ssh root@client01.local poweroff

odysseas

  • Ομάδα διαγωνισμάτων 2011
  • *
  • Μηνύματα: 842
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #9 στις: 23 Φεβ 2010, 11:25:23 μμ »
ευχαριστώ πολύ για την απάντηση.

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

βέβαια απ' όσο θυμάμαι η απευθείας σύνδεση ως root είναι by default απενεργοποιημένη, αλλά θα πρέπει να το δοκιμάσω στο εργαστήριο για να δω αν θα υπάρξει πρόβλημα.

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 5433
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #10 στις: 23 Φεβ 2010, 11:35:10 μμ »
βέβαια απ' όσο θυμάμαι η απευθείας σύνδεση ως root είναι by default απενεργοποιημένη...

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

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

Όποιος θέλει δοκιμάζει να ακολουθήσει τις οδηγίες εγκατάστασης,
  http://wiki.ubuntu-gr.org/sch-scripts/Εγκατάσταση
και δίνει ανατροφοδότηση για ό,τι του λείπει ώστε να τα βρουν έτοιμα όσοι βάλουν το Ubuntu 10.04 τον Απρίλη που θα βγει επίσημα.

Δημήτρης Δαλαγιώργος

  • Πληροφορικός Πανεπιστημίου Αθηνών
  • Πληροφορικοί Δυτικής Μακεδονίας
  • *
  • Μηνύματα: 376
Απ: Απομακρυσμένες συνδέσεις χωρίς κωδικό (passwordless ssh)
« Απάντηση #11 στις: 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. Μπορώ να το αλλάξω αυτό;
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller