![SSH ForceCommand 示例 - 要求用户在获取 shell 访问权限之前输入令牌吗?](https://linux22.com/image/540698/SSH%20ForceCommand%20%E7%A4%BA%E4%BE%8B%20-%20%E8%A6%81%E6%B1%82%E7%94%A8%E6%88%B7%E5%9C%A8%E8%8E%B7%E5%8F%96%20shell%20%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E4%B9%8B%E5%89%8D%E8%BE%93%E5%85%A5%E4%BB%A4%E7%89%8C%E5%90%97%EF%BC%9F.png)
我想提示用户一些信息前当他们通过 SSH 登录时,他们会进入 BASH shell。理想情况下,我希望执行一个脚本,提示他们输入信息,检查信息是否正确,然后如果正确,则将他们放入 shell。所以,想想:
ssh [email protected]
password: xxxx
do you agree to the terms and conditions of use? enter yes or no:
yes
OK, here's your shell:
#
有人能提供一个如何做这样的事情的例子吗?
答案1
创建新的登录脚本(/bin/bash_rest):
#!/bin/bash
echo "do you agree to the terms and conditions of use? enter yes or no:"
read ans
case $ans in
y|yes|Y|Yes) bash;;
*) exit
esac
并设置为登录 shell:
chmod +x /bin/bash_rest
usermod -s /bin/bash_rest ooshro
ooshro@ooshro:~$ ssh -p 2022 localhost
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
Last login: Thu Feb 24 17:43:06 2011 from 10.0.2.2
do you agree to the terms and conditions of use? enter yes or no:
yes
ooshro@ubuntu-1010-server-01:~$ exit
Connection to localhost closed.
ooshro@ooshro:~$ ssh -p 2022 localhost
Linux ubuntu-1010-server-01 2.6.35-25-generic-pae #44-Ubuntu SMP Fri Jan 21 19:01:46 UTC 2011 i686 GNU/Linux
Ubuntu 10.10
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
Last login: Thu Feb 24 17:43:17 2011 from 10.0.2.2
do you agree to the terms and conditions of use? enter yes or no:
no
Connection to localhost closed.
答案2
假设你正在使用 opensshd,一种可行的替代方案几乎可以满足你的要求,而且实现起来要简单得多,那就是使用登录横幅。这不会完全按照你的要求执行 - 它会显示一个文本前用户登录。
您可以相应地更改您的政策 - “通过登录,您接受这些条款和条件”。
您可以使用 /etc/sshd/sshd_config 中的“Banner”选项执行此操作。例如:
# 回显“横幅 /etc/sshd/sshd-banner”>> /etc/sshd/sshd_config # echo “登录即表示您接受条款和条件。” > /etc/sshd/ssh-banner
答案3
我会在该 bash 脚本中添加一些基本的日志记录,并且不会将该脚本设为默认 shell,而是考虑使用 /etc/ssh/sshrc 或 /etc/profile.local 或 /etc/profile。测试是必要的,因为不同系统上的行为可能有所不同。有一些理由不创建非标准 shell,其中之一是需要向 /etc/shells 添加新 shell。除非绝对必要,否则请保留在 /etc/shells 中定义的 shell。