8
votes

Bash: contrôler ssh

J'ai ce fichier Bash, qui demande une adresse IP, un mot de passe, etc. pour OpenSSH à un périphérique.

Maintenant, si j'utilise ssh root @ ip , je dois entrer le mot de passe. C'est vraiment irritant. Deuxièmement; Je ne peux pas laisser mon script en envoyer des commandes.

C'est ce que je veux ->

  1. pas le mot de passe; J'ai déjà trouvé quelque chose; Mais cela me dit que les commandes ne sont pas trouvées?:

    #! / usr / bin / attendre -f

    pwawn ssh root @ $ iPaddr

    attendre "mot de passe:"

    Sommeil 1

    Envoyer "$ rasserd \ r"

    1. Je souhaite que l'utilisateur puisse voir des menus où ils peuvent choisir; après ça; Chaque commande est faite pour lui. Donc, comme une nouvelle fenêtre, ou quelque chose comme ça?

    2. Je ne veux pas utiliser: -Any trucs externes -Non montage supplémentaire de la connexion SSH

      bash info: gnu bash, v. 4.0.33 (1) -Release (I486-PC-Linux-GNU), fonctionnant sur la menthe Linux. Mais il doit être disponible pour plusieurs distro de Linux, ainsi que sur Mac?


8 Réponses :


3
votes

De nombreux outils pour faire de grandes longueurs pour éviter ce que vous faites. Je recommande d'utiliser des clés publiques SSH pour résoudre ce problème au lieu de mots de passe.

La grande alternative consiste à écrire votre propre client SSH modifié en fonction de la source ouverte afin de prendre le contrôle de la gestion du mot de passe.

Oh, eh bien, j'ai oublié. Vous pouvez probablement immerger cela avec une PTY, puisque / dev / tty sera ce que vous contrôlez. attendre pourrait vous aider avec cela.


2 commentaires

Comme je l'ai dit: Pas d'édition supplémentaire de la connexion SSH ; y compris les clés publiques.


Je pourrais commencer à éditer le client SSH, mais cela va prendre un certain temps. Merci d'avoir suggéré.



1
votes

Utilisez SSH-KeyGen pour créer une clé publique de votre machine, puis copiez votre local ~ / .ssh / id_rsa.pub ou ~ / .ssh / identity.pub Pour le système distant, dans ~ / .SSH / Authorize_Keys .

Vous devrez peut-être resserrer les autorisations sur le fichier Authorisé_Keys: CHMOD 600


0 commentaires

2
votes

Attendez-vous à est l'outil habituel pour automatiser les sessions interactives.


4 commentaires

J'ai déjà donné cela dans ma question, mais je n'ai pas de spawn et j'envoie non plus. Maintenant, je dois vraiment les télécharger, mettre mon dossier? Si dur.


Celles-ci s'attendent à des commandes, vous exécutez le script par attendu, oui?


SPAWN et SENDENT sont des commandes que attendez reconnaît. Ils ne sont pas des téléchargements séparés. Vous devez vous assurer que le chemin d'accès à attendre est correct pour votre système dans le shebang. Vous voudrez probablement utiliser la commande Interact dans votre Attendez-vous au script .


Comment puis-je utiliser attendre comme quelque chose à partager avec les autres?



1
votes

Avez-vous envisagé paramiko ? C'est une bibliothèque Python pour interagir avec SSH.


4 commentaires

Puis-je interagir avec elle à travers Bash?


Cela dépend de ce que vous voulez. Si vous avez fourni plus de détails sur quel problème vous êtes vraiment essayer de résoudre, ce serait plus facile d'aider.


Ce que j'essaie de faire est d'utiliser bash créer une sorte de client SSH. J'aime vraiment cette idée de paramiko; Mais ce que je dois faire, c'est l'interagir avec Bash. Le code est écrit en bash et je veux qu'il le garde comme ça. Je ne sais pas python; Je suis un programmeur de départ. De toute façon; Ce que je veux faire, c'est comme (presque) tout ce qui est possible avec ssh; le mot de passe comme IT-dans Paramiko, CD au répertoire; édition de la permission; Supprimer des fichiers / des dossiers; créer des dossiers; Copier des fichiers / des dossiers d'un PC sur un périphérique; etc.


Necropost avancé: Pexpect, spécifiquement pxsh, PEXPECT.SOURCEFORGE.net/PXSSH.HTML fait le travail .



16
votes

La bonne façon de le faire sans stocker les mots de passe en clair sur votre machine est avec SSH. Première exécution:

ssh-keygen

Ceci générera une nouvelle clé SSH dans ~ / .ssh / id_rsa.pub . Après cela, il est simplement exécuté:

utilisateur ssh-copy-id utilisateur@my.server.com

Si vous êtes sur OS X ou une autre machine qui n'a pas "SSH-Copy-ID", il y a une ligne Alternatives telles que celle-ci:

CAT ~ / .SSH / ID_RSA.PUB | SSH User @ Machine "MKDIR ~ / .SSH; CAT >> ~ / .SSH / Authorisé_keys"

En fin de compte, vous devez simplement ajouter le contenu de ~ / .sssh / id_rsa.pub sur votre machine locale sur ~ / .ssh / autorisé_keys sur le serveur distant. Comment vous faites cela est à vous, ce qui précède, les raccourcis rapides sont juste pour le faire.


0 commentaires

1
votes

Même si je voudrais utiliser des touches PEM pour cela et c'est un ancien sujet, je voulais aussi citer sshpass < / a>


0 commentaires

2
votes

La bonne façon d'aller est de copier les clés comme cela a été dit ici. Pour ajouter quelque chose à la conversation, il y a des cas où sshpass code> peut être pratique.

La question pose spécifiquement de la script dans un système avec SSH. S'il s'agit du développement d'un système intégré, il peut être utile de combiner sshpass code> avec des options de ligne de commande, car elle se lit sur ce message P>

ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no pi@192.168.0.145


0 commentaires