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

Fre*_*ers 6 shell security ssh

我今天学到了很多东西,使用 RSA 来处理 ssh 并创建没有密码、没有登录名等的系统用户帐户。我试图做的是创建一个用户,该用户需要一个~/.ssh/和密码(初始 ssh 设置需要)

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

我知道使用

ssh-keygen
ssh-copy-id user@remotehost
Run Code Online (Sandbox Code Playgroud)

这对 RSA 来说很简单

我知道如何用 say 创建用户

useradd -r newuser
Run Code Online (Sandbox Code Playgroud)

或者

adduser newuser --system --shell=/bin/false
passwd newuser
passwd -d newuser
Run Code Online (Sandbox Code Playgroud)
  • 最终目标

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

  • 原因/目标

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

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

Ste*_*ris 9

将 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:::
Run Code Online (Sandbox Code Playgroud)

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

现在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
Run Code Online (Sandbox Code Playgroud)

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

$ ssh -i ~/.ssh/id_rsa tst@test1
hello
Connection to test1 closed.
Run Code Online (Sandbox Code Playgroud)

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

$ ssh -i ~/.ssh/id_rsa tst@test1 reboot 
hello
$
Run Code Online (Sandbox Code Playgroud)

  • `usermod -p '*' user` 似乎比直接编辑 /etc/shadow 更安全... (2认同)