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 进入远程主机。
将 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)