47 votes

SSH rend tous les mots de passe saisis visibles lorsque la commande est fournie en tant qu'argument à la commande SSH.

Si j'exécute ceci :

ssh user@server 'mysql -u user -p'

Lorsqu'il me demande le mot de passe MySQL et que je commence à le taper, le mot de passe est visible à l'écran. Comment puis-je éviter cela ? Si je me connecte via ssh puis exécutez la commande MySQL, tout fonctionne correctement.

110voto

Toby Speight Points 4636

Si vous fournissez une commande distante à exécuter, SSH n'alloue pas de tty, de sorte que la commande distante ne peut pas désactiver l'écho. Vous pouvez forcer SSH à fournir un tty en utilisant la commande -t option :

ssh -t user@server 'mysql -u user -p'

L'option équivalente (pour les -o ou pour le fichier de configuration) est RequestTTY . Je vous déconseille de l'utiliser dans la configuration car il peut avoir des effets indésirables pour les commandes non interactives .

29voto

Hastur Points 17791

Stockage du mot de passe dans un fichier d'options protégé

Si vous pouvez faire confiance [*] la sécurité de l'ordinateur distant, vous pouvez stocker le mot de passe dans un fichier d'options correctement protégé, comme suggéré dans la section Lignes directrices pour la sécurité des mots de passe à l'intention des utilisateurs finaux chapitre du manuel, sans qu'il soit nécessaire de communiquer par l'intermédiaire de ssh ou de taper à chaque fois.

Plus précisément, vous pouvez ajouter une ligne dans la section [client] du fichier .my.cnf dans votre répertoire personnel :

[client]
password=your_pass

Bien entendu, vous devez faire en sorte que ce fichier ne soit accessible à personne d'autre que vous, en définissant le mode d'accès au fichier sur 400 ou 600 avec, par exemple, la commande suivante

chmod 600 ~/.my.cnf

Vous pouvez alors utiliser quelque chose comme

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

donde user110971 est le nom d'utilisateur de votre compte.


Forcer ssh à allouer un pseudo tty ( ssh -t )

Ce problème se produit chaque fois que vous envoyez une commande par l'intermédiaire de ssh et vous devez insérer l'entrée parce que, par défaut, ssh n'allouera pas de pseudo-tty.

Vous pouvez forcer l'allocation du tty avec l'option -t (voire plusieurs si nécessaire) :

-t

Forcer l'allocation de pseudo-tty. Cette fonction peut être utilisée pour exécuter des programmes arbitraires à l'écran sur une machine distante, ce qui peut s'avérer très utile, par exemple pour mettre en œuvre des services de menu. Multiple -t forcent l'allocation de tty, même si ssh n'a pas de tty local.

Comme vous pouvez le lire dans ce message de Debian (Jul_11_2008) à propos de sudo Il s'agit d'une vieille question qui revient souvent :

ssh user@server "sudo ls"  
password: password  

Et le mot de passe vous est indiqué

La solution est de forcer ssh à allouer un pseudo-tty, avec l'option -t :

ssh -t user@server sudo ls

Remarque :

[*] Si vous pouvez compter sur le fait de laisser le mot de passe dans un fichier accessible uniquement par vous et par root sur le serveur travail client.
S'il est possible de redémarrer l'ordinateur distant en changeant de système d'exploitation ou de retirer le disque dur, l'ordinateur ne peut pas être considéré comme totalement sûr... mais dans ce cas, la base de données elle-même ne sera pas sûre.

3voto

bandie Points 135

L'option de montage "hidepid" pour proc fs est également utile. Elle rend vos lignes de commande invisibles dans la liste des processus pour les autres utilisateurs. Exemple de fstab :

proc /proc proc hidepid=1 0 0

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X