Ίσως μια μάλλον ασυνήθιστη κατάσταση, αλλά θέλω να καθορίσω ένα ιδιωτικό κλειδί SSH που θα χρησιμοποιηθεί κατά την εκτέλεση μιας εντολής κελύφους (git) από τον τοπικό υπολογιστή.
Βασικά, κάπως έτσι:
git clone [email protected]:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"
Ή ακόμα καλύτερα (σε Ruby):
with_key("/home/christoffer/ssh_keys/theuser") do
sh("git clone [email protected]:TheUser/TheProject.git")
end
Έχω δει παραδείγματα σύνδεσης σε έναν απομακρυσμένο διακομιστή με το Net::SSH που χρησιμοποιεί ένα καθορισμένο ιδιωτικό κλειδί, αλλά αυτή είναι μια τοπική εντολή. Είναι δυνατόν;
Κάτι τέτοιο θα πρέπει να λειτουργεί (προτείνεται από την orip):
ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone [email protected]:user/project.git'
αν προτιμάτε τα subshells, μπορείτε να δοκιμάσετε το εξής (αν και είναι πιο εύθραυστο):
ssh-agent $(ssh-add /somewhere/yourkey; git clone [email protected]:user/project.git)
Το Git θα καλέσει το SSH το οποίο θα βρει τον πράκτορά του μέσω της μεταβλητής περιβάλλοντος- αυτό με τη σειρά του θα έχει φορτωμένο το κλειδί.
Εναλλακτικά, η ρύθμιση του HOME
μπορεί επίσης να κάνει το κόλπο, υπό την προϋπόθεση ότι είστε πρόθυμοι να ρυθμίσετε έναν κατάλογο που περιέχει μόνο έναν κατάλογο .ssh
ως HOME
- αυτός μπορεί να περιέχει είτε ένα identity.pub, είτε ένα αρχείο ρυθμίσεων που ορίζει το IdentityFile.
Περιεχόμενα του my_git_ssh_wrapper:
#!/bin/bash
ssh -i /path/to/ssh/secret/key $1 $2
Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το κλειδί κάνοντας:
GIT_SSH=my_git_ssh_wrapper git clone [email protected]:TheUser/TheProject.git
Μπορείτε να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος GIT_SSH. Αλλά θα πρέπει να τυλίξετε το ssh και τις επιλογές σε ένα σενάριο κελύφους.
Δείτε το εγχειρίδιο του git: man git
στο κέλυφος εντολών σας.