2012-09-10 111 views
3

我正试图编写一个脚本,验证成功的ssh登录后的用户权限。SSH强制命令参数

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

任何帮助?

+0

什么是“SSH强制命令”?你能向我们展示你正在尝试使用的命令吗?调试你看不到的代码是非常困难的。 – ghoti

回答

1

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

0

SSH不允许通过参数(或甚至通过管道)传递密码,它通过设计制作,甚至在man页面中进行了描述。只有通过ssh进行自动登录的方式是通过文件认证。

我想你可以尝试比较用户提供的密码和/ etc/shadow中的值。这应该做的伎俩:)

+1

我不一定试图通过密码作为参数,但我想知道如何或什么传递给强制命令脚本作为参数。 –

+1

强迫命令脚本是什么意思? – Bugari

+0

有一个名为forced_command的ssh选项,您可以在登录时强制ssh运行。 –

0

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

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

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

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

的机制如下:

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

唯一脚本读取SSH_ORIGINAL_COMMAND检查该命令是)允许的(在参数列表)b)是在用户路径,然后检查是否参数传递的规则(在我们的情况下,简单的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发送到远程主机。