【问题标题】:Switch user with "sudo su - username" using SSH keys使用 SSH 密钥通过“sudo su - username”切换用户
【发布时间】:2013-06-08 08:22:46
【问题描述】:

我一直在尝试使用 ssh 密钥,以便能够使用 sudo su - username 在同一 Linux 机器/服务器上从一个用户切换到另一个用户。

我想做的是:我在一台服务器上有多个帐户。 我想用passwd -l username锁定这些帐户, 并且只允许使用 SSH 密钥进行访问,通过在同一台机器上从一个用户向另一个用户 ssh-ing,例如:[user1@server]$ ssh user2@server

我通过将user1 的公钥复制到user2authorized_keys 文件来做到这一点,它工作正常。

但我还想做的另一件事是能够使用 ssh 密钥从 user1sudo su - user2,这样我就可以避免密码提示。

例如,[user1@server]$ sudo su - user2

我已修改 sshd_config 文件,并取消注释字段:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no

但我还是做不到。

我也尝试了我在互联网上找到的关于代理转发的内容,但没有。

谁能帮助我如何做到这一点或指出正确的方向?

【问题讨论】:

  • sudo 不知道也不关心 ssh 键。它们是完全不同的东西。为了使无密码sudo 正常工作,您需要正确配置sudo

标签: linux ssh ssh-keys


【解决方案1】:

sudo 与 SSH 和 sshd 配置无关。

您真正想要的是一个使用 SSH 公钥的 PAM 模块。我不确定您的原因是什么,因为整个想法似乎有点奇怪,但是,好吧。 pam_ssh 是执行此操作的模块。

【讨论】:

  • 嗨 kirelagin,我之所以要这样做,是因为我想切换到同一台机器上的其他用户,而不必成为第一个 root,然后再切换到其他用户。所以,我认为 SSH 密钥可以解决这个问题。但我想我错了。相反,我想使用 sudo su - user2 从一个用户切换到另一个用户(不成为 root),并避免密码提示。所以我认为 ssh 密钥在这里会有所帮助。
  • 当然,ssh 密钥可以帮助你,但是你不需要sudo 那么su 就足够了。正如我所提到的,您可以使用pam_ssh 模块并配置您的PAM 以将其用于su 身份验证。请注意,无论如何您都必须输入密码才能解密您的 SSH 密钥,因为如果您的密钥没有使用密码加密,那它有点没用。
  • @kirelagin - ssh-agents 完成了不输入密码的工作
【解决方案2】:

要让 sudo 对其他用户无密码地工作,需要进行以下更改(以超级用户访问权限执行):

编辑 /etc/sudoers

visudo

配置更改

# Allow user to sudo su as anyone without password
user    ALL=(ALL)       NOPASSWD: ALL
%group  ALL=(ALL)       NOPASSWD: ALL

# Allow user to become another user
user    ALL=(user2)    NOPASSWD: ALL
%group  ALL=(user2)    NOPASSWD: ALL

现在使用后者 sudo su - user2 应该可以工作

唯一的绊脚石是要添加到 sudo 组的用户

usermod -a -G sudo user

配置中的上述示例首先显示用户,然后按组显示 - 你只需要两个中的一个 -

已编辑:

visudo

%group2    ALL=(ALL:ALL)    PASSWD: ALL
%group1    ALL=(ALL:ALL)    NOPASSWD: ALL

添加运行组

groupadd group1
groupadd group2

对于需要密码的用户来说

usermod -a -G group2 user1
usermod -a -G group2 user2
etc..

对于不需要密码的用户:

usermod -a -G group nuser1
usermod -a -G group nuser2
etc

【讨论】:

  • 您好 vahid,感谢您的回复。这样我就不会使用 ssh 密钥。让我澄清一下我想要做什么。假设我有 user1、user2 和 user3。我希望 user1 能够使用 ssh 密钥切换到 user2 而不会提示输入密码。 user2 到 user1 也是如此。但我不希望 user3 能够在没有密码的情况下切换到任何其他用户。在这个例子中,我只考虑 3 个用户,但实际上我在一台机器上有大约 50 个用户。因此,转到 sudoers 文件并为这 50 个用户中的每个用户添加并不是那么有效,除非我错了。
  • 然后通过组进行 - 创建包含变体的组,然后将用户作为变体的一部分包含在内,因此 group1 {allowed users } group2 {different rule } 然后使用您需要的 sudo 配置两行 %group 和 %group2 -- sudo 和 ssh config 之间没有关系..
  • evans.io/posts/ssh-agent-for-sudo-authentication 看看这里尝试将两者结合起来 - 典型的设置没有关系..
  • 设置编辑器不是“必需的”。应该避免。即使它只针对当前会话,它也有可能使没有经验的用户感到困惑。你也忘了添加“sudo”。
  • Albin 删除了它,不确定您的意思是忘记添加 sudo 吗?你可以编辑更新它吗?
【解决方案3】:

在某些情况下(例如,您没有 root 权限)您可以使用类似

ssh-copy-id -i ~/.ssh/id_rsa.pub user2@localhost

然后登录

ssh user2@localhost

【讨论】:

  • 简而言之,您可以通过首先启用对其他用户的无密码访问,然后使用ssh <otheruser>@0登录,来登录同一服务器/PC上的其他用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2012-11-22
  • 2021-03-09
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多