如何以非交互式用户身份登录? (例如mysql)

如何以非交互式用户身份登录? (例如mysql)

我需要运行一个命令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 mysqlwith 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可以以每个用户 ( ) 的身份运行每个命令 ( ) ,而无需提供密码 ( )。iotoppowertopwpa_cli(ALL)NOPASSWD

如果您的用户有一个条目,(ALL) ALL那么您就可以发出上述命令来成为用户mysql。如果没有,您可能需要编辑/etc/sudoers文件 ( visudo) 并添加一行包含

username      (ALL)=ALL

这会让你成为每一个用户(输入username密码后)或类似的内容

username      (mysql)=ALL

这只会让您成为用户mysql

相关内容