Y a-t-il un moyen SSH / SCP À un autre serveur au nom d'un autre utilisateur via le script?

Je dois automatiser un moyen de distribuer des fichiers à plusieurs serveurs. Bien sûr, le problème est que je dois utiliser un protocole sécurisé (SSH ou SCP), Et nom d'utilisateur / Le mot de passe sur chaque serveur est différent.

Le script est que nous avons le serveur principal a avec l'utilisateur a_prod, et nous devons envoyer des scripts mis à jour / configurations et ainsi sur les serveurs b, c, d, ... Et sur ces serveurs, Noms d'utilisateur: b_dev, c_test, d_prod Tout le monde a un mot de passe unique.

Les noms d'utilisateur doivent être uniques dans différents environnements pour plusieurs raisons associées à DB2 et sécurité corporative.

Les clés partagées ne fonctionneront pas dans ce scénario. J'ai donc besoin de transférer des noms d'utilisateur et des mots de passe via le script. C'est un moyen AIX, Et je n'ai pas la possibilité d'établir expect.

Des idées?

Les clés courantes sont mentionnées dans plusieurs réponses ci-dessous: j'ai essayé plusieurs façons de le faire, je pense que le problème principal est que les identificateurs de l'utilisateur distant n'existent pas sur aucun autre hôte, donc je ne peux pas créer ssh-keygen Pour eux d'accueillir à partir de laquelle je veux utiliser ssh, Mettre en œuvre une implémentation de clé commune avec l'utilisateur principal (a_prod), avoir plusieurs identifiants en fonction de l'hôte cible (b_dev, c_test_d_prod). La clé fermée pour ces utilisateurs doit être générée sur le nœud a Pour les utilisateurs distants, puis leurs touches opennes doivent être copiées sur les nœuds cibles.
Invité:

Dominique

Confirmation de:

"D'entreprise S (stupidité)" :-)

je pense que SSH / SCP En général, vit en philosophie UNIX. Développeurs d'applications très rares Unix Faites délibérément le faire pour que l'administrateur puisse facilement faire quelque chose de stupide. En règle générale, il y aura un type d'avertissement: "Vous ne voulez probablement pas faire cela parce que ... Mais si tu veux vraiment, bon! ".

Dans le cas de la transmission de mot de passe ssh Dans le script, ils compliquent délibérément parce que c'est juste tel

mauvaise idée

.

Pour le moment je ne m'aurais même pas inquiet SSH. Vous devez vraiment parler aux professionnels de la sécurité d'entreprise et proposer une véritable solution pour le scénario. S'ils ne veulent pas utiliser les clés, demandez-leur ce que vous devriez faire. Si cela ne fonctionne pas, indiquez à vos gestionnaires qu'ils veulent que cela soit fait en raison des restrictions de la sécurité des entreprises. Si les gestionnaires insistent sur celui-ci,

Obtenez-le par écrit ou est votre cul sur la ligne

Blanche

Confirmation de:

Premier avertissement: veillez à ne pas créer de menace de sécurité au nom de la pertinence. Kevin et Kyle parlent de bons moments. Stockage de plusieurs combinaisons de nom d'utilisateur et de mot de passe dans le fichier (Même dans une base de données cryptée), Probablement, est une très mauvaise idée et peut violer la politique d'entreprise.

La décision de votre problème peut être un certificat du côté du client. Voir ci-dessous pour plus d'informations:

http://bashcurescancer.com/set ... .html
http://bashcurescancer.com/run ... .html

Hannah

Confirmation de:

Insérez la clause de non-responsabilité standard sur les politiques d'entreprise et pourquoi il est mauvais de placer ici user / pass dans les scripts.

Mais nous travaillons tous dans le monde réel, où parfois cela n'a pas de sens. Alors .. Il existe de nombreux outils qui vous permettront de le faire. W. Shell Il n'y a pas de moyen intégré de le faire fonctionner. Mon arme préférée pour des scripts très rapides et sales de ce genre - Expect. Courir pour drôle facilement.

#!/usr/bin/expect

set nodename "hostname"
set username "user"
set password "pass"
set prompt "your prompt on the remote system"

eval spawn ssh -x $user@$nodeaddy

set timeout 15

expect "password:" { send "$password\r" }
expect "$prompt" { send "script\r" }
exit 0

De toute évidence, cela peut fonctionner et peut ne pas fonctionner, mais on peut voir la syntaxe à quel point il est facile de commencer à travailler.

Giselle

Confirmation de:

Si nous supposons que la paire de clés ouvertes et fermées est autorisée par la politique d'entreprise, cela n'est pas si difficile à atteindre. Pour obtenir le nom d'utilisateur, différent au nom de l'utilisateur qui a commencé ssh (scénario), Utilisation

username@host

. La chose la plus difficile à faire fonctionner les clés fermées correctes. En supposant que, à cause d'un faux sentiment de sécurité, chaque hôte devrait utiliser une autre paire de clés (Sinon c'est plus facile), Vous devez créer un fichier de configuration qui indique au client qu'un couple à utiliser pour quel hôte (Vous pouvez également spécifier le nom d'utilisateur dans le fichier).

Pour openssh Le fichier ressemblera à ceci:

host a_prod
user usera
IdentityFile ~/.ssh/keyfora_prod

host b_dev
user userb
IdentityFile ~/.ssh/keyforb_prod

etc.

N'oubliez pas que cette installation n'est plus sécurisée. Si quelqu'un peut accéder à cet utilisateur sur cet ordinateur, il peut lire toutes les clés fermées. (qui ne peut pas être un mot de passe si tout devrait être sûr ou que vous devez pirater ssh_agent), ainsi que des mots de passe codés rigidement. Comme il n'y a aucune raison pour que les fichiers clés fermés soient situés ailleurs, à l'exception du répertoire SSH de cet utilisateur (En cas de perte, vous pouvez facilement créer une nouvelle clé.), La présence de quatre fichiers ne diffère pas de la présence d'une en termes de sécurité.

Hannah

Confirmation de:

d'accord - J'ai finalement obtenu cela fonctionne comme suit:

Faire, construire ssh-keygen Sur tous les serveurs.

Configurez le fichier d'autorisation de chaque utilisateur avec sa clé ouverte.

Configurez un fichier d'identification pour chaque utilisateur avec une clé fermée.

Copiez les touches fermées pour les serveurs de destination sur le serveur à partir duquel vous souhaitez utiliser ssh, sous la forme de fichiers uniques (b_dev_id_dsa_2048_a, c_test_id_dsa_a, ...)

Appeler ssh sur l'hôte a de la manière suivante:

ssh -i b_dev_id_dsa_2048_a b_dev@b

Et alt, travaille enfin.

Merci à tous pour votre aide, et enfin niXar Au cours de ce dernier moment, Homer Simpson DUH, Puisque c'est exactement la converse de ce que vous faites si l'utilisateur sur tous les hôtes est identique.

Agathe

Confirmation de:

Sans clés privées Expect Ou quelque chose comme ça, je ne comprends pas comment vous pouvez le faire automatiquement. Quelque chose doit donner.

Avez-vous quelque chose à travailler? J'ai suggéré que vous n'avez pas Perl, Depuis lors, vous pourriez utiliser Expect.pm? Python? N'importe quoi? Juste vieux ksh laid? Dis nous en plus.

Si vous n'êtes pas autorisé à utiliser le langage de programmation, vous devez entrer la passe manuellement. Dans ce cas, vous pouvez utiliser:

scp myfile b_dev@b_prod:/path/to/dest

Si nous parlons de packages, envisagez d'utiliser SFTP. Ensuite, vous pouvez utiliser lftp Et n'entrez pas le mot de passe directement à partir de la page de référence:

lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]

Mais si vous ne pouvez pas obtenir Expect, Je doute que vous puissiez utiliser lftp. Tu peux?

/ Oh, je déteste la merde exclusive Unix

Hannah

Confirmation de:

Ce n'est pas une bonne idée, mais si vous avez vraiment besoin de le faire, sshpass Peut-être vous aider à vous aider:
http://sourceforge.net/projects/sshpass/

Blanche

Confirmation de:

Je devais faire quelque chose de similaire, seulement dans la direction opposée. Nous obtenons des fichiers à partir de plusieurs serveurs et c'est ainsi que nous l'avons fait.

awk '{FS="|"; printf("rsync %s:%s %s &\n", $1, $2, $3)}' config | sh

Créer un fichier nommé config Et placez les lignes que vous souhaitez exécuter. (Remarque: vous devez d'abord insérer une chaîne vide.).

Comment est-il défini maintenant, vous mettrez

username@server.com|(folder on remote server)|(folder on local server)

dans config, Et il synchronise les deux fichiers. Voulez-vous changer la commande rsync dans une équipe awk Sur le contraire.

Cela fonctionnera bien avec l'authentification. ssh-key, que nous utilisons.

Alice

Confirmation de:

Je suggère également de créer des clés SSH pour l'authentification et d'utiliser de tels outils que unison ou lsyncd (en fonction de vos besoins), Synchroniser des fichiers.

Si l'authentification à clé ne convient pas, vous pouvez utiliser "attendre" (
http://linux.die.net/man/1/expect
), Pour l'écrire. Expect Vérifie une sortie spécifique (Disons une question pour un mot de passe) et entrée connexe d'une chaîne spécifique (Dans cet exemple, mot de passe).

Mais à nouveau, comme suggéré, je préférerais une solution avec une clé SSH.

Pour répondre aux questions, connectez-vous ou registre