5

我正在尝试编写一个脚本,在成功 ssh 登录后验证用户权限。

我正在通过 SSH 强制命令执行此操作。我想传递脚本参数(例如它正在验证的用户),但我不确定我会怎么做。

有什么帮助吗?

4

3 回答 3

2

这是我自己想出来的。您可以通过设置环境变量并在强制命令脚本中读取它们来将参数传递给强制命令脚本。

于 2012-10-06T00:34:21.400 回答
1

您可以ForcedCommand在 sshd 配置文件中设置 a ,或者更好地在authorized_keys相应用户的文件中设置。

ssh execute 将环境变量 SSH_ORIGINAL_COMMAND 设置为发送到服务器的完整命令行,然后执行ForcedCommand

编写使用此环境变量来提供参数的脚本具有安全隐患,因为攻击者可能会; rm -rf /在命令行末尾添加例如。然后首先ForcedCommand将运行,然后rm -rf /.

本文描述了一个脚本,该脚本可用于一般锁定允许的命令行。它还包含相关信息的链接。

机制如下:

  1. 将脚本(仅)作为ForcedCommand
  2. 添加允许的“真实”命令作为参数
  3. 在相应用户帐户的主目录中添加一个规则文件 ( .onlyrules),它将允许的参数限制为实际命令。

唯一的脚本读取 SSH_ORIGINAL_COMMAND 检查命令是否 a) 允许(在参数列表中) b) 在用户 PATH 上,然后检查参数是否通过规则(在我们的例子中是简单的 sed(1) 脚本。

设置示例:

ForcedCommand /usr/local/bin/only ls

authorized_keys

command="/usr/local/bin/only ls" ssh-rsa AAAA...

.onlyrules

\:^ls /tmp$:{p;q}

这将只允许将命令发送ls /tmp到远程主机。

于 2017-03-12T21:36:06.820 回答
0

SSH 不允许通过参数(甚至通过管道)传递密码,它是设计使然,甚至在man页面中有描述。通过 ssh 自动登录的唯一方法是通过文件身份验证。

我认为您可以尝试将用户提供的密码与 /etc/shadow 中的值进行比较。这应该够了吧 :)

于 2012-09-10T07:06:39.320 回答