私はこの機能が初めてですが、Kerberosを使用してCentOS 7システムでActive Directoryサービスアカウントを認証し、sqlcmdを使用してリモートデータベースでクエリを実行しようとしています。
より多くのコンテキストを提供するために私が取り組んでいるPythonコードのいくつかは次のとおりです。
import subprocess
kinit = ['kinit', '[email protected]', '-k', '-t', '/usr/local/var/krb5kdc/serviceaccount.keytab']
kinit_cl = subprocess.Popen(kinit, stdout=subprocess.PIPE)
kinit_output = kinit_cl.stdout.read()
klist = ['klist','-l']
klist_cl = subprocess.Popen(klist, stdout=subprocess.PIPE)
klist_output = klist_cl.stdout.read()
print klist_output
if 'KEYRING:persistent' in klist_output:
print "Service Account Authenticated"
#proceed to run sqlcmd queries
私の質問は、私の資格情報が保存されているキータブの管理に関連しています。私のパスワードはプレーンテキストとして保存されないので大丈夫です。しかし、パスワードは30日ごとに期限切れになり、パスワードコマンドラインでパスワードを変更するには、古いパスワードの入力を求められます。つまり、パスワードをどこかに保存して明示的な方法で渡す必要がありますが、パスワードを知らず、スクリプトにパスワードを管理するようにしておくことをお勧めします。
Pythonで新しい強力なパスワードを生成することは問題ではありません。私の質問は、以前のパスワードを要求せずにパスワードを変更するためにどのコマンドを使用できるかです。から命令を受けるkadmin.localパスワードが変更されたというメッセージが表示されますが、許可されたパスワードはまだ古いパスワードです。カミンサービス アカウントを管理者としてローカル ファイルに追加しても、次のエラーが発生します。
[root@osboxes krb5kdc]# kadmin.local -q "addprinc serviceaccount/admin"
Authenticating as principal serviceaccount/[email protected] with password.
WARNING: no policy specified for serviceaccount/[email protected];
defaulting to no policy
Enter password for principal "serviceaccount/[email protected]":
Re-enter password for principal "serviceaccount/[email protected]":
Principal "serviceaccount/[email protected]" created.
[root@osboxes krb5kdc]# kinit serviceaccount/admin
kinit: Client 'serviceaccount/[email protected]' not found in Kerberos database while getting initial credentials
[root@osboxes krb5kdc]# kadmin serviceaccount
kadmin: Client 'serviceaccount/[email protected]' not found in Kerberos database while initializing kadmin interface
ただ合格する必要がありますか?カミン?このスクリプトをどうやって書きますか?