SSH ForceCommand 示例 - 要求用户在获取 shell 访问权限之前输入令牌吗?

SSH ForceCommand 示例 - 要求用户在获取 shell 访问权限之前输入令牌吗?

我想提示用户一些信息当他们通过 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。

相关内容