Πώς να καθορίσετε το ιδιωτικό κλειδί SSH που θα χρησιμοποιηθεί κατά την εκτέλεση εντολών κελύφους στο Git;

Ίσως μια μάλλον ασυνήθιστη κατάσταση, αλλά θέλω να καθορίσω ένα ιδιωτικό κλειδί SSH που θα χρησιμοποιηθεί κατά την εκτέλεση μιας εντολής κελύφους (git) από τον τοπικό υπολογιστή.

Βασικά, κάπως έτσι:

git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser"

Ή ακόμα καλύτερα (σε Ruby):

with_key("/home/christoffer/ssh_keys/theuser") do
  sh("git clone git@github.com:TheUser/TheProject.git")
end

Έχω δει παραδείγματα σύνδεσης σε έναν απομακρυσμένο διακομιστή με το Net::SSH που χρησιμοποιεί ένα καθορισμένο ιδιωτικό κλειδί, αλλά αυτή είναι μια τοπική εντολή. Είναι δυνατόν;

Λύση

Κάτι τέτοιο θα πρέπει να λειτουργεί (προτείνεται από την orip):

ssh-agent bash -c 'ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git'

αν προτιμάτε τα subshells, μπορείτε να δοκιμάσετε το εξής (αν και είναι πιο εύθραυστο):

ssh-agent $(ssh-add /somewhere/yourkey; git clone git@github.com:user/project.git)

Το Git θα καλέσει το SSH το οποίο θα βρει τον πράκτορά του μέσω της μεταβλητής περιβάλλοντος- αυτό με τη σειρά του θα έχει φορτωμένο το κλειδί.

Εναλλακτικά, η ρύθμιση του HOME μπορεί επίσης να κάνει το κόλπο, υπό την προϋπόθεση ότι είστε πρόθυμοι να ρυθμίσετε έναν κατάλογο που περιέχει μόνο έναν κατάλογο .ssh ως HOME- αυτός μπορεί να περιέχει είτε ένα identity.pub, είτε ένα αρχείο ρυθμίσεων που ορίζει το IdentityFile.

Σχόλια (17)

Περιεχόμενα του my_git_ssh_wrapper:

#!/bin/bash

ssh -i /path/to/ssh/secret/key $1 $2

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το κλειδί κάνοντας:

GIT_SSH=my_git_ssh_wrapper git clone git@github.com:TheUser/TheProject.git
Σχόλια (5)

Μπορείτε να χρησιμοποιήσετε τη μεταβλητή περιβάλλοντος GIT_SSH. Αλλά θα πρέπει να τυλίξετε το ssh και τις επιλογές σε ένα σενάριο κελύφους.

Δείτε το εγχειρίδιο του git: man git στο κέλυφος εντολών σας.

Σχόλια (0)