2017-06-01 102 views
3

我正在使用python脚本来限制使用authorized_keys文件中的command参数的命令用法。使用Python的ssh restrict命令

命令

ssh host-name bash --login -c 'exec $0 "[email protected]"' mkdir -p hello 

我的脚本执行必要的行动来限制的命令。过滤后,python脚本的错误为sys.exit(1),成功为sys.exit(0)。在返回值之后,上面的ssh命令在最后没有得到执行。还有什么我需要从python脚本发送到SSH守护进程?

+0

'authorized_keys'中的行如何显示? “过滤脚本”是怎样的? – Jakuje

+0

command =“file-name.py”ssh-rsa = key。 – wonder

+0

'file-name.py'中有什么? – Jakuje

回答

1

我想将其更改为

ssh host-name bash --login -c 'exec $0 "[email protected]" && mkdir -p hello' 

应该做的伎俩,否则bash将仅承担在单引号的部分是要执行的命令。

如果第二部分应该即使第一部分出现故障来执行,取代&&;

+1

我认为重点是shell * only *运行'mkdir -p hello',因为这三个参数被传递给'exec'命令。 – chepner

+0

不,这是行不通的。该命令没有得到执行。 – wonder

2

command改性剂在authorized_keys是不使用(仅)来验证用户命令,但该命令运行而不是用户提供的命令。这意味着从那里调用sys.exit(0)可防止运行用户提供的命令。

在该脚本中,验证命令后,您还需要运行它!

+0

所以你的意思是说我应该运行'bash --login -c'exec $ 0“$ @”'mkdir -p hello' using'subprocess.Popen' ???例如, – wonder

+0

。或者仅仅是'SSH_ORIGINAL_COMMAND'环境变量的内容,在你过滤之后对你来说是“理智的”。 – Jakuje

+0

是的,它是完全一样的。但是我觉得用'Popen'运行上面的命令不需要'shell = True',它将不会执行。出于安全原因,不应该使用'shell'。 – wonder