[PYTHON] J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.

en premier

La création et l'installation d'une clé d'authentification par clé publique SSH basée sur Unix est simple, et c'est presque la même chose, mais c'est un problème.

Je voulais automatiser cela autant que possible.

Je pense que ce que vous faites généralement est comme ça.

# (1)Création de clé
ssh-keygen -N "" -t rsa -f ~/.ssh/id_rsa

# (2-a)Transférer la clé sur le serveur
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

# (2-b)Ou autorisé manuellement le serveur_Ajouter aux clés
cat ~/.ssh/id_rsa.pub| ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh/ && chmod 755 ~/"

# (3)Ajoutez des informations de clé privée si nécessaire
vi ~/.ssh/config

Je ne l'utilise pas tous les jours S'il y a beaucoup de serveurs cibles, ce sera un problème. Je pense que cela peut être automatisé. Je pensais que c'était le déclencheur.

Fonctionnalité

Il a été confirmé qu'il fonctionne sur Mac OS X et CentOS 7. Je pense que ssh peut être utilisé sous Unix / Linux, et il peut être utilisé si Python 2.7 fonctionne.

Vous pouvez exécuter les commandes nécessaires de (1), (2) et (3) avec une seule commande. Si vous avez besoin de (2), vous ne devez transférer le mot de passe du serveur qu'une seule fois.

Soyez assuré que les commandes exécutées dans les coulisses sont affichées en vert (?)

kobito.1449918056.679926.png

Je pense que c'est pratique lorsque vous essayez de définir l'authentification par clé publique pour le moment à partir de l'état vide lorsque vous avez emprunté un VPS, etc.

Comment utiliser

introduction

Environnement dans lequel python2.7.x peut être exécuté Le programme lui-même est transformé en une seule source afin qu'il puisse être manipulé facilement.

Cliquez ici pour le référentiel https://github.com/yuki2006/pubkey

Si seulement le corps principal suffit

wget https://raw.githubusercontent.com/yuki2006/pubkey/master/pubkey.py

Avertissement

Parce qu'il gère les clés privées Veuillez n'utiliser que ceux qui comprennent le principe de fonctionnement.

Le développeur ne garantit pas que des problèmes surviendront avec cet outil.

Aidez-moi

python pubkey.py
#Ou avec l'autorisation d'exécution
./pubkey.py 
./pubkey.py -h
usage: pubkey.py [-h] [-l] [-p PrivateKeyPath] [-k] [-c] [-a ALIAS]
                 [-N PassPhrase]
                 server
positional arguments:
  server                user@server

optional arguments:
  -h, --help            show this help message and exit
  -l, --Avec l'option LocalOnly, l'opération sur le serveur
Je ne travaillerai pas.
  -p PrivateKeyPath, --private PrivateKeyPath
chemin de la clé privée[default
                        /Users/yuki2006/.ssh/id_rsa]
  -k, --générer une clé avec keygen keygen
  -c, --config          .ssh/Écrire les informations de l'hôte dans la configuration
  -a ALIAS, --alias ALIAS
                        -Valide uniquement avec l'option c,
Du fichier de configuration
Définissez le champ Host sur this
  -N PassPhrase Spécifiez la phrase de passe. Les caractères vierges sont également possibles
C'est Noh.(-(Valable lorsque l'option k)

Ajouter la clé sur la télécommande

Options minimales

./pubkey.py [email protected]

Exécutez (2) avec ~ / .ssh / id_rsa.pub comme clé publique. Ajoutez la clé publique à ~ / .ssh / authorized_keys à [email protected]. À ce stade, si la commande ssh-copy-id peut être utilisée localement, utilisez (2-a), et si elle ne peut pas être utilisée, exécutez (2-b).

Veuillez saisir le mot de passe du serveur.

Il génère également une clé privée et une clé publique (-k)

./pubkey.py -k [email protected]

Exécutez (1) avant d'exécuter (2). À ce stade, (1) est simplement appelé, entrez donc la phrase de passe en fonction de l'affichage.

Spécifiez la phrase de passe (-N)

./pubkey.py -N "" -k [email protected]

C'est pour ceux qui ont du mal à taper une phrase de passe lors de l'appel (1). L'option -N est attachée lors de l'appel de ssh-keygen.

Spécifiez le fichier de clé privée. (-p / -privé)

./pubkey.py -p ~/.ssh/key -N "" -k [email protected]
./pubkey.py --private ~/.ssh/key -N "" -k [email protected]

Si vous souhaitez utiliser autre chose que la clé privée par défaut. Spécifiez le chemin de la clé privée après -p. La clé publique utilisée est celle avec .pub ajouté, comme ~ / .ssh / key.pub.

Écrivez les paramètres dans ~ / .ssh / config (-c)

./pubkey.py -c -p ~/.ssh/key -N "" -k [email protected]

Avec l'option -c, le texte suivant sera ajouté à ~ / .ssh / config. C'est l'automatisation du processus de (3).

Host sample.com
       User hoge
       IdentityFile ~/.ssh/key

Spécifiez l'alias. (-une)

./pubkey.py -a sample -c -p ~/.ssh/key -N "" -k [email protected]

En termes simples, il sera ajouté comme ci-dessous.

Host sample
		hostname sample.com
		User hoge
		IdentityFile ~/.ssh/key

Si vous définissez ceci, vous pouvez vous connecter simplement en appuyant comme ceci. (Nom d'utilisateur et nom d'hôte omis)

ssh sample

Ne mettez pas la clé publique sur la télécommande (-l / -LocalOnly)

./pubkey.py -l -a sample -c -p ~/.ssh/key -N "" -k [email protected]

(2) n'est pas exécuté. Spécifiez quand vous voulez créer un keygen ou un fichier de configuration mais n'avez pas besoin de mettre la clé publique sur la télécommande. Principalement pour le débogage.

Épilogue

En fait, j'ai confirmé qu'il était possible d'améliorer l'efficacité en l'utilisant pour de nombreuses unités et en faisant en sorte que les gens l'utilisent.

Il peut y avoir des doutes sur la façon d'écrire Python. Il est supérieur ou égal à 2.7 car il utilise argparse, Tous les processus principaux devraient fonctionner, donc j'aimerais envisager de travailler avec 2.6, etc. si demandé.

Si vous avez des problèmes ou des demandes d'extraction, veuillez les publier sur github. Au contraire, faites-moi savoir s'il existe un outil utile sans l'utiliser.

Recommended Posts

J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
Création d'un outil qui facilite la définition des paramètres des modèles d'apprentissage automatique
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
[Python] J'ai écrit un test de "Streamlit" qui facilite la création d'applications de visualisation.
Je veux créer un fichier pip et le refléter dans le menu fixe
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
J'ai créé un outil pour compiler nativement Hy
J'ai créé un outil pour obtenir de nouveaux articles
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
Fileinput, un module qui facilite l'écriture de programmes de filtrage de type Perl en Python
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
J'ai essayé d'utiliser une bibliothèque (fil conducteur) qui rend le package de threads Python plus facile à utiliser
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
Une histoire qui facilite l'estimation de la surface habitable à l'aide d'Elasticsearch et de Python
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Procédure pour créer un Job qui extrait une image Docker et la teste avec des actions Github
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Une histoire qui rend le débogage de modèle plus facile à voir dans l'environnement Django + SQLAlchemy
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE
Une histoire qui a permis de créer automatiquement une liste de lecture Anison à partir de vos fichiers musicaux
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
[Titan Craft] J'ai créé un outil pour invoquer un géant sur Minecraft
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
Je veux créer un histogramme et superposer la courbe de distribution normale dessus. édition matplotlib
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
Qiskit: Je veux créer un circuit qui crée des états arbitraires! !!
Je veux créer un système pour éviter d'oublier de serrer la clé 1
J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai créé un bot Discord en Python qui se traduit quand il réagit
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres
J'ai créé un konoha de bibliothèque qui fait passer le tokenizer à une belle sensation
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Quand je retourne en utilisant le chainer, ça va un peu
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai fait un script pour afficher des pictogrammes
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
J'ai créé un outil d'estampage automatique du navigateur.
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
J'ai essayé de publier mon propre module pour pouvoir l'installer
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
Un sort qui élimine les caractères et symboles non japonais et crée un corpus simple japonais
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné