J'ai un site en tant que dépôt Git distant tirant de Bitbucket.com en utilisant un alias SSH. Je peux démarrer manuellement l'agent ssh sur mon serveur mais je dois le faire à chaque fois que je me connecte via SSH.
Je démarre manuellement l'agent ssh:
eval ssh-agent $SHELL
Ensuite, j'ajoute l'agent:
ssh-add ~/.ssh/bitbucket_id
Ensuite, il apparaît quand je fais:
ssh-add -l
Et je suis prêt à partir. Existe-t-il un moyen d'automatiser ce processus pour ne pas avoir à le faire à chaque connexion? Le serveur exécute RedHat 6.2 (Santiago).
ssh-agent <command>
fonctionne<command>
comme un sous-processus dessh-agent
, donc vous démarrez un nouveau shell. Je pense que tu veuxeval ssh-agent
..bash_profile
est spécifique à bash,.profile
est générique pour tous les shells POSIX.bash
recherchera d'abord.bash_profile
, puis par défaut.profile
.ssh-agent
pour un shell "standard" (compatible POSIX) esteval $(ssh-agent -s)
. Notez également que vous devez vous assurer de vous débarrasser correctement de l'agent lorsque vous vous déconnectez, il est donc également conseillé de mettretrap 'kill $SSH_AGENT_PID' EXIT
votre.profile
après la ligne qui démarre l'agent.Réponses:
Veuillez parcourir cet article. Vous pouvez trouver cela très utile:
http://mah.everybody.org/docs/ssh
Juste au cas où le lien ci-dessus disparaîtrait un jour, je capture la partie principale de la solution ci-dessous:
la source
.bash_profile
aidesource ~/.bash_profile
de votre session shell actuelle. Le redémarrage de la machine fonctionnera également car cela chargera de toute façon la nouvelle configuration.SSH_ENV="$HOME/.ssh/env"
(c'est-à-dire tout simplement pas / environnement) Pourquoi? sshd utilise ~ / .ssh / environnement (voir la page de manuel: PermitUserEnvironment). Github recommande également cela dans leur solution - help.github.com/articles/…ssh-agent
commande de démarrage dans .bashrc empêchera lascp
commande de fonctionner.Sur Arch Linux, les éléments suivants fonctionnent vraiment bien (devraient fonctionner sur toutes les distributions basées sur Systemd):
Créez un service utilisateur systemd en mettant ce qui suit à
~/.config/systemd/user/ssh-agent.service
:Configurez le shell pour avoir une variable d'environnement pour le socket (
.bash_profile, .zshrc, ...
):Activez le service pour qu'il démarre automatiquement à la connexion et démarrez-le:
Ajoutez le paramètre de configuration suivant à votre fichier de configuration ssh local
~/.ssh/config
(cela fonctionne depuis SSH 7.2):Cela demandera au client ssh de toujours ajouter la clé à un agent en cours d'exécution, il n'est donc pas nécessaire de l'ajouter au préalable.
la source
ssh-agent
processus individuel . Peut-être que je manque de connaissances même après avoir lu les documents.SSH_AGENT_PID
variable d'environnement, cependant :(Vieille question, mais je suis tombé sur une situation similaire. Ne pensez pas que la réponse ci-dessus réalise pleinement ce qui est nécessaire. La pièce manquante est
keychain
; installez-le s'il ne l'est pas déjà.Ajoutez ensuite la ligne suivante à votre
~/.bashrc
Cela démarrera
ssh-agent
s'il n'est pas en cours d'exécution, connectez-vous si c'est le cas, chargez lesssh-agent
variables d'environnement dans votre shell et chargez votre clé ssh.Modifiez
id_rsa
la clé privée que~/.ssh
vous souhaitez charger.Référence
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
la source
keychain --eval id_[yourid file]
à .bashrceval `keychain --eval id_[yourid file]`
de.bashrc
. Les raccourcis nécessaires pour évaluer les variables d'environnement dans le shell actuel pour accéder à l'agent ssh en cours d'exécution.-q
option pour le mode silencieux. Plus d'infos sur Keychain: funtoo.org/KeychainLa solution acceptée présente les inconvénients suivants:
Si vos clés ne nécessitent pas de taper le mot de passe, je suggère la solution suivante. Ajoutez ce qui suit à votre
.bash_profile
toute fin (éditez la liste des clés selon vos besoins):Il présente les avantages suivants:
Il présente des inconvénients possibles:
ssh-add
commande n'influencera qu'une seule session, ce qui n'est en fait un problème que dans des circonstances très atypiques;Notez que plusieurs
ssh-agent
processus ne sont pas un inconvénient, car ils ne prennent pas plus de mémoire ou de temps CPU.la source
Ajoutez-le à votre
~/.bashrc
, puis déconnectez-vous et reconnectez-vous pour prendre effet.Cela ne devrait vous demander un mot de passe que la première fois que vous vous connectez après chaque redémarrage. Il continuera à être réutilisé
ssh-agent
tant qu'il restera actif.la source
~/.ssh/id_rsa
? Il semble que lassh-add
partie de votre réponse attend des noms de fichiers par défaut pour les clés.J'ai donc utilisé les approches décrites ci-dessus, mais je préfère en quelque sorte que l'agent meure à la fin de ma dernière session bash. C'est un peu plus long que les autres solutions, mais c'est mon approche préférée. L'idée de base est que la première session bash démarre l'agent ssh. Ensuite, chaque session bash supplémentaire vérifie le fichier de configuration (
~/.ssh/.agent_env
). Si c'est le cas et qu'il y a une session en cours, sourcez l'environnement et créez un lien physique vers le fichier socket dans/tmp
(doit être sur le même système de fichiers que le fichier socket d'origine). Lorsque les sessions bash sont fermées, chacune supprime son propre lien physique. La dernière session à fermer constatera que les liens physiques ont 2 liens (le lien physique et l'original), la suppression de la propre socket du processus et la suppression du processus se traduiront par 0, laissant un environnement propre après la dernière session bash.la source
Juste pour ajouter une autre solution: P, je suis allé avec une combinaison des solutions de @spheenik et @ collin-anderson.
Pourrait être un peu plus élégant mais c'est simple et lisible. Cette solution:
AddKeysToAgent yes
est dans votre configuration ssh afin que les clés soient automatiquement ajoutées lors de l'utilisationCommentaires bienvenus :)
la source
AddKeysToAgent yes
cadre. Merci.Je résolu en ajoutant ceci à la / etc / profile - l' ensemble du système (ou locale utilisateur .profile ou _.bash_profile_):
Cela démarre un nouvel agent ssh s'il n'est pas en cours d'exécution pour l'utilisateur actuel, ou réinitialise le paramètre env ssh-agent s'il est en cours d'exécution.
la source
if pgrep -u $WHOAMI $SERVICE >/dev/null
marche?Les utilisateurs de la coquille de poisson peuvent utiliser ce script pour faire la même chose.
la source
J'utilise le ssh-ident outil pour cela.
Depuis sa page de manuel :
la source
J'ai essayé quelques solutions de plusieurs sources, mais tout semblait trop compliqué. Enfin j'ai trouvé le plus simple :)
Si vous n'êtes pas encore familier avec zsh et oh-my-zsh, installez-le. Vous allez l'adorer :)
Puis éditez
.zshrc
trouver la
plugins
section et la mettre à jour pour l'utiliserssh-agent
comme ceci:Et c'est tout! Vous aurez
ssh-agent
opérationnel à chaque fois que vous démarrez votre shellla source
J'aime beaucoup vos réponses. Cela a rendu le travail des
cygwin / linux
hôtes beaucoup plus facile. J'ai combiné les fonctions de début et de fin pour le sécuriser.la source