我正在尝试编写一个脚本,该脚本在成功登录ssh后验证用户权限。
我是通过SSH强制命令执行此操作的。我想传递脚本参数(例如它正在验证的用户),但我不确定我会怎么做。
任何帮助?
答案 0 :(得分:2)
我自己想出来了。您可以通过设置环境变量并在强制命令脚本中读取参数来将参数传递给强制命令脚本。
答案 1 :(得分:0)
SSH不允许通过参数(甚至通过管道)传递密码,它是由设计制作的,甚至在man
页面中描述。通过ssh自动登录的唯一方法是通过文件验证。
我认为您可以尝试将用户提供的密码与/ etc / shadow中的值进行比较。这应该是诀窍:))
答案 2 :(得分:0)
您可以在sshd配置文件中设置ForcedCommand
,或者在相应用户的authorized_keys
文件中设置更好。
ssh execution将环境变量SSH_ORIGINAL_COMMAND设置为发送到服务器的完整命令行,然后执行ForcedCommand
。
编写使用此环境变量提供参数的脚本具有安全隐患,因为攻击者可能会添加例如命令行末尾的; rm -rf /
。然后首先运行ForcedCommand
,然后运行rm -rf /
。
This article描述了一个脚本,可用于一般性地锁定允许的命令行。它还包含相关信息的链接。
机制如下:
ForcedCommand
.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
发送到远程主机。