我需要运行一个命令mysql_upgrade
,当以 root 身份运行时,会返回
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/lib/mysql/mysql.sock'
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
FATAL ERROR: Upgrade failed
所以我决定我需要以 user 身份登录mysql
。我该怎么做?
mysql
我为用户设置了密码passwd
并尝试登录:
$ ssh -l mysql 12.34.56.78
[email protected]'s password:
Permission denied, please try again.
我以 root 身份登录并设置 shell for mysql
with chsh -s /bin/bash mysql
。我检查了该/etc/ssh/sshd_config
条目AllowUsers
包含用户mysql
并且DenyGroups
仅包含deniedssh
;后一组不包含 user mysql
:
# getent group deniedssh
deniedssh:x:500:
我该怎么做才能以非交互式用户身份登录mysql
?
答案1
您的推理是有缺陷的,您不需要以 mysql 用户身份登录 shell。您看到的身份验证失败来自 mysqld,您需要告诉mysql_upgrade
使用哪个用户名和密码与 mysql 通信,这里根本不涉及 unix 身份验证。
答案2
这是 的一个常见用例sudo
,它允许您以系统管理员授予您的任何用户身份运行命令(取决于配置,甚至是 shell)(不仅仅是root
大多数新手可能认为的那样)。
根据您的sudo
配置,您可能可以这样做
$ sudo -s -u mysql
作为您的“普通”用户帐户。您可以通过发出命令来检查您可以成为哪些用户
$ sudo -l
这可能如下所示(我的本地安装和我的“普通”用户):
$ sudo -l
Matching Defaults entries for aw on swiftsure:
env_keep+=HOME, env_keep+=XDG_SESSION_COOKIE, env_keep+="XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER", insults, tty_tickets, editor=/usr/bin/vim, !lecture
Runas and Command-specific defaults for aw:
Defaults>root targetpw, env_file=/etc/sudo/root.env
User aw may run the following commands on swiftsure:
(ALL) ALL
(ALL) NOPASSWD: /usr/bin/htop, /usr/sbin/iotop, /usr/sbin/powertop
(ALL) NOPASSWD: /usr/bin/wpa_cli
$
最后几行是重要的几行。在此示例中,它告诉用户aw
可以ALL
以每个用户 ( ) 的身份运行每个命令 ( ) (ALL)
,并且htop
可以以每个用户 ( ) 的身份运行每个命令 ( ) ,而无需提供密码 ( )。iotop
powertop
wpa_cli
(ALL)
NOPASSWD
如果您的用户有一个条目,(ALL) ALL
那么您就可以发出上述命令来成为用户mysql
。如果没有,您可能需要编辑/etc/sudoers
文件 ( visudo
) 并添加一行包含
username (ALL)=ALL
这会让你成为每一个用户(输入username
密码后)或类似的内容
username (mysql)=ALL
这只会让您成为用户mysql
。