2017-06-01 77 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