web-dev-qa-db-fra.com

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

Si je lance ceci:

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

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

45
user110971

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

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

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

100
Toby Speight

Stocker le 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 le Consignes de l'utilisateur final en matière de sécurité par mot de passe chapitre du manuel, sans qu'il soit nécessaire de communiquer via ssh ou de taper à chaque fois.

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

[client]
password=your_pass

Bien sûr, vous devez empêcher ce fichier d’être accessible à qui que ce soit en définissant le mode d’accès au fichier sur 400 ou 600 avec, par exemple,.

chmod 600 ~/.my.cnf

Ensuite, vous pouvez utiliser quelque chose comme

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

user110971 est le nom d'utilisateur de votre compte.


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

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

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

-t

Forcer l'allocation de pseudo-terminaux Ceci peut être utilisé pour exécuter des programmes d'écran basés sur des écrans arbitraires sur une machine distante, ce qui peut s'avérer très utile, par exemple. lors de la mise en œuvre des services de menu. Plusieurs options -t forcent l'attribution de tty, même si ssh n'a pas de tty local.

Comme vous pouvez le lire dans cet article de Debian (Jul_11_2008) à propos de Sudo, il s’agit d’un vieux problème qui aime se reproduire:

ssh user@server "Sudo ls"  
password: password  

Et le mot de passe vous est montré

La solution consiste à forcer ssh à allouer un pseudo-tty, avec l'indicateur -t:

ssh -t user@server Sudo ls

Remarque:

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

28
Hastur

L'option de montage "hidepid" pour proc fs est également utile. Cela 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
2
bandie