Wie entkommen? im Passwort?

24

Wie könnte man das Ausrufezeichen in einem Passwort umgehen:

$ mysql -umyuser -pone_@&!two
-bash: !two: event not found

Es half nicht, den offensichtlichen Backslash zu versuchen:

$ mysql -umyuser -pone_@&\!two
[1] 22242
-bash: !two: command not found
name@domain.com [~]# ERROR 1045 (28000): Access denied for user 'myuser'@'localhost' (using password: YES)

Alle meine Google-Suchen deuten darauf hin, dass der Backslash helfen würde, aber nicht. Es gibt keine Möglichkeit, Anführungszeichen wie in dieser Frage vorgeschlagen zu verwenden . Die Zeile wird in einem .bashrc-Alias ​​verwendet. Keine Sorge, die hier gezeigten Benutzernamen und Passwörter sind nur Beispiele und werden nicht in der Produktion verwendet!

dotancohen
quelle
Sie können immer einfache Anführungszeichen verwenden. Um ein einfaches Anführungszeichen "innerhalb" einer Zeichenfolge mit einfachen Anführungszeichen zu verwenden, versuchen Sie ''\'
Folgendes
6
Übrigens ist die Eingabe des Kennworts in die Befehlszeile ein potenzielles Sicherheitsrisiko für ein Mehrbenutzersystem. Es ist ganz einfach, die Befehlszeilenargumente eines laufenden Prozesses zu untersuchen. Verwenden Sie stattdessen eine .my.cnf-Datei (denken chmod 600Sie daran).
cas
Hoppla. das '\''ist nicht''\'
cas
Danke, Craig. Tatsächlich ist dies sicherer als die Alternative: Sie senden jedem eine Kopie des Kennworts per E-Mail, in der gespeichert wird, wer weiß wo. Ich persönlich würde es vorziehen, wenn jeder Entwickler seinen eigenen /home/userund einen MySQL-Benutzer hat, aber ich bin in dieser Hinsicht nicht der Entscheidungsträger.
Dotancohen
2
Management ist weise und allwissend :)
cas

Antworten:

38

Verwenden Sie einfache Anführungszeichen um das Kennwort wie folgt: -p'one_@&!two'

Um es in einen Alias ​​zu setzen, würden Sie Folgendes tun:

alias runmysql='mysql -umyuser -p'\''one_@&!two'\'''

cas
quelle
1
kein Leerzeichen zwischen -p und Passwort, aber ja, das sollte funktionieren
mulaz
bereits bearbeitet aus dem Raum :)
cas
4
-bash: !two: command not found

Sie müssen auch den &Charakter entkommen :

$ mysql -umyuser -pone_@\&\!two
Quanten
quelle
3

Wenn Sie das nie benutzen! Verlaufsfunktionen ist es möglicherweise praktischer, sie einfach zu deaktivieren (mit set +Hin Ihrem bashrc).

Richard Kettlewell
quelle
1

Sie können das Passwort in einer Bash-Variablen speichern:

$ pass='one_@&!two'

Ersetzen Sie dann die Variable im Befehl:

$ mysql -umyuser -p$pass
user7341695
quelle
interessante
antwort