2011-08-24 136 views
3

我試圖通過子進程+ ssh連接到遠程服務器,以列出目錄中的文件並打印該目錄中文件的內容。要做到這一點,我需要運行kinit作爲Python子進程。關於如何做到這一點的任何想法?假設用戶使用他們的kerberos ID和密碼登錄..kinit使用Python子進程

謝謝。

回答

2

如果要運行kinit以使用戶獲得Kerberos票證,只需提示輸入密碼(例如,使用getpass模塊),然後將該輸入傳遞給子流程。

這看起來是這樣的:

from subprocess import Popen, PIPE 

kinit = '/usr/bin/kinit' 
kinit_args = [ kinit, '%[email protected]%s' % (userid, realm) ] 
kinit = Popen(kinit_args, stdin=PIPE, stdout=PIPE, stderr=PIPE) 
kinit.stdin.write('%s\n' % password) 
kinit.wait() 

這將建立一個票通常的方式,這應該被任何東西所回升,看起來在通常的方式Kerberos票據(該片段是從代碼,它是驗證LDAP連接):https://github.com/jeremyroman/pyceo/blob/master/ceo/ldapi.py

+0

有沒有辦法做到這一點,而不提示輸入密碼? – sdfasdfasdf

+1

如果您知道密碼,則可以在不提示的情況下使用它。就我所知,除非您有密碼或keytab,否則您無法獲得Kerberos票據。 –

+0

如果你想避免在代碼中包含密碼,你應該爲服務主體'kadmin -q「ktadd -k /etc/apache2/http.keytab HTTP/www.example.com」創建一個keytab文件並使用用'kinit -k -t /etc/apache2/http.keytab HTTP/www.example.com'來請求TGT – Ereli