Je souhaite accéder à une URL qui nécessite un nom d'utilisateur / mot de passe. Je voudrais essayer d'y accéder avec curl. En ce moment, je fais quelque chose comme:
curl http://api.somesite.com/test/blah?something=123
J'ai une erreur. Je suppose que je dois spécifier un nom d'utilisateur et un mot de passe avec la commande ci-dessus.
Comment puis je faire ça?
curl
credentials
user246114
la source
la source
print -- '-u username:password' > somewhere && curl -K somewhere http://...
--netrc-file
) est plus sûre. Il garde le mot de passe hors de l'historique, ps, votre script, etc. C'est la seule forme que j'utilise dans tous mes scripts et pour toutes les utilisations authentifiées decurl
.Il est plus sûr de faire:
... comme passer une simple chaîne utilisateur / mot de passe sur la ligne de commande, est une mauvaise idée.
Le format du fichier de mot de passe est (selon
man curl
):Remarque:
https://
ou similaire! Juste le nom d'hôte.machine
», «login
» et «password
» ne sont que des mots clés; les informations réelles sont celles qui se trouvent après ces mots clés.la source
-K <file>
ou--config <file>
pour recevoir des indicateurs de boucle via un fichier ou une entrée standard. (Attention: à ne pas confondre avec-k
ou--insecure
!).netrc
fichier en clair avec des autorisations strictes appropriées, de sorte que seul votre utilisateur puisse le lire, que d'autres mécanismes (par exemple, les arguments de ligne de commande) qui permettent à d' autres utilisateurs de lire les informations.Ou la même chose mais une syntaxe différente
la source
start "" "http://username:[email protected]/test/blah?something=123"
. Il peut être lancé de n'importe où. Cela s'applique également aux connexions ftp; DVous pouvez également simplement envoyer le nom d'utilisateur en écrivant:
Curl vous demandera alors le mot de passe, et le mot de passe ne sera pas visible à l'écran (ou si vous devez copier / coller la commande).
la source
Pour passer le mot de passe en toute sécurité dans un script (c'est-à-dire l'empêcher de s'afficher avec ps auxf ou logs), vous pouvez le faire avec le drapeau -K- (lire la configuration de stdin) et un heredoc:
la source
--config
option (-K) ... peut-être une meilleure solution serait de mettre "--user user: password" dans un fichier et simplement-K the file
pour n'avoir qu'une seule copie du mot de passe plutôt une copie dans chaque script . Il est beaucoup plus facile de sécuriser un seul fichier.cat "${password_filepath}" | sed -e "s/^/-u ${username}:/" | curl --url "${url}" -K-
. J'ai dû mettre-K-
avant l'URL pour l'ancien bash macOS, YMMV.Habituellement, la commande CURL est appelée
si vous n'avez pas de mot de passe ou si vous souhaitez ignorer l'invite de commande pour demander un mot de passe, laissez la section mot de passe vide.
c'est à dire
curl https://example.com\?param\=ParamValue -u USERNAME:
la source
la source
Pour que le mot de passe n'apparaisse pas dans votre
.bash_history
:la source
ps auxw |grep curl
au bon moment. De même, le mot de passe sera enregistré s'il est exécuté viasudo
assez facile, faites ce qui suit:
la source
D'autres réponses ont suggéré à netrc de spécifier le nom d'utilisateur et le mot de passe, en fonction de ce que j'ai lu, je suis d'accord. Voici quelques détails de syntaxe:
https://ec.haxx.se/usingcurl-netrc.html
Comme d'autres réponses, je voudrais souligner la nécessité de prêter attention à la sécurité concernant cette question.
Bien que je ne sois pas un expert, j'ai trouvé ces liens perspicaces:
https://ec.haxx.se/cmdline-passwords.html
Résumer:
L'utilisation des versions cryptées des protocoles (HTTPS vs HTTP) (FTPS vs FTP) peut aider à éviter les fuites réseau.
L'utilisation de netrc peut aider à éviter les fuites de ligne de commande.
Pour aller plus loin, il semble que vous pouvez également crypter les fichiers netrc en utilisant gpg
https://brandur.org/fragments/gpg-curl
Avec cela, vos informations d'identification ne sont pas "au repos" (stockées) en texte brut.
la source
En clair et simplement, le moyen le plus sûr serait d'utiliser des variables d'environnement pour stocker / récupérer vos informations d'identification. Ainsi une commande curl comme:
Appellerait alors votre api reposante et passerait l'en-
WWW_Authentication
tête http avec les valeurs encodées en Base64 deAPI_USER
etAPI_HASH
. Le-Lk
juste indique à curl de suivre les redirections http 30x et d'utiliser une gestion tls non sécurisée (ie ignorer les erreurs ssl). Alors que le double--
est juste du sucre de syntaxe bash pour arrêter le traitement des drapeaux de ligne de commande. De plus, les indicateurs-b cookies.txt
et-c cookies.txt
traitent les cookies avec l'-b
envoi de cookies et le-c
stockage local des cookies.Le manuel contient plus d' exemples de méthodes d' authentification .
la source
Vous pouvez utiliser une commande comme,
Le mot de passe HTTP sera alors déclenché.
Référence: http://www.asempt.com/article/how-use-curl-http-password-protected-site
la source
Le moyen le plus sûr de transmettre des informations d'identification à curl est d'être invité à les insérer. C'est ce qui se passe lors du passage du nom d'utilisateur comme suggéré précédemment (
-u USERNAME
).Mais que faire si vous ne pouvez pas transmettre le nom d'utilisateur de cette façon? Par exemple, le nom d'utilisateur peut devoir faire partie de l'URL et seul le mot de passe doit faire partie d'une charge utile json.
tl; dr: Voici comment utiliser curl en toute sécurité dans ce cas:
read
demandera à la fois le nom d'utilisateur et le mot de passe à partir de la ligne de commande, et stockera les valeurs soumises dans deux variables qui peuvent être des références dans les commandes suivantes et finalement non définies.Je vais expliquer pourquoi les autres solutions ne sont pas idéales.
Pourquoi les variables d'environnement sont-elles dangereuses
Pourquoi est-il dangereux de le taper directement dans une commande sur la ligne de commande Parce que votre secret finit par être visible par tout autre utilisateur en cours d'exécution
ps -aux
car il répertorie les commandes soumises pour chaque processus en cours d'exécution. Aussi parce que votre secret se retrouve alors dans l'historique de bash (une fois le shell terminé).Pourquoi est-il dangereux de l'inclure dans un fichier local Une restriction d'accès POSIX stricte sur le fichier peut atténuer le risque dans ce scénario. Cependant, il s'agit toujours d'un fichier sur votre système de fichiers, non chiffré au repos.
la source
J'avais le même besoin en bash (Ubuntu 16.04 LTS) et les commandes fournies dans les réponses n'ont pas fonctionné dans mon cas. J'ai dû utiliser:
Les guillemets doubles dans les
-F
arguments ne sont nécessaires que si vous utilisez des variables, donc à partir de la ligne de commande, ça... -F 'username=myuser' ...
ira.Avis de sécurité pertinent: comme le souligne M. Mark Ribau dans les commentaires, cette commande affiche le mot de passe (variable $ PASS, développée) dans la liste de processus!
la source
Si vous êtes sur un système doté de l'application Gnome keyring, une solution qui évite d'exposer directement le mot de passe consiste à utiliser gkeyring.py pour extraire le mot de passe du trousseau:
la source
C'est BEAUCOUP plus que l'OP demandé, mais comme c'est le meilleur résultat pour passer des mots de passe en toute sécurité
curl
, j'ajoute ces solutions ici pour ceux qui arrivent ici à la recherche de cela.REMARQUE:
-s
arg forread
command n'est pas POSIX et n'est donc pas disponible partout, il ne sera donc pas utilisé ci-dessous. Nous utiliseronsstty -echo
et à lastty echo
place.REMARQUE: Toutes les variables bash ci-dessous pourraient à la place être déclarées comme locales si elles sont dans une fonction, plutôt que de les désactiver.
REMARQUE:
perl
est généralement disponible sur tous les systèmes que j'ai essayés car il s'agit d'une dépendance pour de nombreuses choses, alorsruby
que cepython
n'est pas le cas, utilisez-laperl
ici. Si vous pouvez garantirruby
/python
où vous faites cela, vous pouvez remplacer laperl
commande par leur équivalent.REMARQUE: testé dans
bash
3.2.57 sur macOS 10.14.4. Quelques petites traductions peuvent être nécessaires pour d'autres shells / installations.Invitez en toute sécurité un utilisateur à saisir un mot de passe (réutilisable) pour boucler. Particulièrement utile si vous devez appeler plusieurs fois curl.
Pour les coques modernes, où
echo
est intégré (vérifier viawhich echo
):Pour les shells plus anciens, où
echo
est quelque chose comme/bin/echo
(où quoi que ce soit en écho peut être vu dans la liste des processus):CETTE VERSION NE PEUT PAS RÉUTILISER LE MOT DE PASSE , voir plus bas à la place.
Si vous avez besoin de stocker temporairement le mot de passe dans un fichier, de le réutiliser pour plusieurs commandes avant de l'effacer (par exemple, parce que vous utilisez des fonctions de réutilisation de code et que vous ne voulez pas répéter le code et ne pouvez pas transmettre la valeur via écho). (Oui, ceux-ci sont un peu artificiels car ils ne sont pas des fonctions dans différentes bibliothèques; j'ai essayé de les réduire au minimum de code pour le montrer.)
Lorsque l'écho est intégré (cela est particulièrement artificiel, car l'écho est intégré, mais fourni pour être complet):
Quand l'écho est quelque chose comme
/bin/echo
:la source