“系统用户”的无密码 SSH,无需登录 Shell

“系统用户”的无密码 SSH,无需登录 Shell

我今天学到了很多东西,用 RSA 来搞乱 ssh 并创建没有密码、没有登录等的系统用户帐户。我想做的是创建一个带有主目录的用户~/.ssh/ 需要和密码(初始 ssh 设置所需)

但我似乎无法正确设置它。

我知道使用

ssh-keygen
ssh-copy-id user@remotehost

这对于 RSA 来说很简单

我知道如何创建一个用户

useradd -r newuser

或者

adduser newuser --system --shell=/bin/false
passwd newuser
passwd -d newuser
  • 最终目标

    是没有 shell 的用户,或者至少无法从远程计算机登录,但仍可用于 ssh 到另一台计算机并运行命令。这可能吗?

  • 原因/目标

    就是让一个用户在 UPS 电量不足时,通过 ssh 关闭其他连接的计算机,然后再关闭主计算机。 (一次只有一台计算机可以通过 USB 连接到 UPS 来监控统计数据)。

我不希望人们能够使用用户名 UPS 通过 SSH 登录,但我需要 ups 能够在没有密码的情况下通过 ssh 进入远程主机。

答案1

将 crypt 字段设置为*!!in/etc/shadow

例如

# adduser tst  
# passwd -l tst
Locking password for user tst.
passwd: Success
# grep tst /etc/passwd
tst:x:1000:1000::/home/tst:/bin/bash
# grep tst /etc/shadow
tst:!!:17030:0:99999:7:::

此时用户无法登录,因为没有有效的密码。

现在将 a 添加到文件command="/thing/to/do"中公钥的开头authorized_keys

例如

# ls -l $PWD/authorized_keys 
-rw-r--r-- 1 tst tst 431 Aug 17 17:54 /home/tst/.ssh/authorized_keys

# cat $PWD/authorized_keys
command="/bin/echo hello" ssh-rsa AAAAB3NzaC1yc2E....etcetc

现在这个键可以用了,但是它唯一能用的就是那个强制命令:

$ ssh -i ~/.ssh/id_rsa tst@test1
hello
Connection to test1 closed.

如果您尝试做任何其他事情,它都会失败,并且仍然强制执行相同的命令

$ ssh -i ~/.ssh/id_rsa tst@test1 reboot 
hello
$

答案2

您可以指定与授权密钥文件中给定公钥关联的强制命令。请参阅“AUTHORIZED_KEYS 文件格式”部分man sshd

command="command"
    Specifies that the command is executed whenever this key is used for authentication. The command supplied by the user (if any) is ignored....

您还可以使用no-pty密钥上的选项来禁止 pty 分配。

答案3

nologin您已在该“主”计算机上使用 shell 创建了一个帐户。对于该帐户,您应该生成 ssh 密钥,该密钥可用于远程登录应关闭的计算机。

nologinshell 将阻止该帐户登录,但仍然可以用于其他系统上的远程登录。

要使用 shell 以用户身份登录,nologin您必须使用su - user_name -s /bin/bash

我的观点是,“主”机器将自动关闭远程服务器,无需人工交互。

答案4

您也可以反其道而行之:设置一个计划任务,检查通过 USB 连接到 UPS 的机器是否在线,而必须关闭的机器则连接到 UPS 的机器是否离线一定时间。一排。由于计算机将使用本地帐户来运行计划任务,因此不需要密码或证书即可执行该任务。如果机器回复 ping,则只需检查您是否收到 ping 回复即可。

另一种方法是使用 KVM 启动关机,就像按下电源按钮一样。根据机器设置,按下电源按钮将仅启动正常关闭操作,或将机器挂起到磁盘。

我不知道在没有某种身份验证的情况下登录远程计算机的方法,除非让帐户暴露在风中或使用安全漏洞(后门)。

虽然这不是您要求完成任务的方法,但它是一种有助于实现您的目标的方法。

相关内容