我今天学到了很多东西,用 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 密钥,该密钥可用于远程登录应关闭的计算机。
nologin
shell 将阻止该帐户登录,但仍然可以用于其他系统上的远程登录。
要使用 shell 以用户身份登录,nologin
您必须使用su - user_name -s /bin/bash
我的观点是,“主”机器将自动关闭远程服务器,无需人工交互。
答案4
您也可以反其道而行之:设置一个计划任务,检查通过 USB 连接到 UPS 的机器是否在线,而必须关闭的机器则连接到 UPS 的机器是否离线一定时间。一排。由于计算机将使用本地帐户来运行计划任务,因此不需要密码或证书即可执行该任务。如果机器回复 ping,则只需检查您是否收到 ping 回复即可。
另一种方法是使用 KVM 启动关机,就像按下电源按钮一样。根据机器设置,按下电源按钮将仅启动正常关闭操作,或将机器挂起到磁盘。
我不知道在没有某种身份验证的情况下登录远程计算机的方法,除非让帐户暴露在风中或使用安全漏洞(后门)。
虽然这不是您要求完成任务的方法,但它是一种有助于实现您的目标的方法。