2013-05-28 1 views
6

나는 데이터베이스에 연결하는 동료와 스크립트를 개발 중이다. 우리는 암호를 비공개로 유지하면서 근무일 동안 계속해서 인증 할 필요없이 코드를 독립적으로 유지하고자합니다. 일부 검색 (우리는 둘 다 파이썬에서 초보자입니다) 후, 우리는이 목적을 위해 키링을 사용할 수있는 것으로 보이기 때문에 pip (설치 날짜의 내 메모리를 기반으로하는 라이브러리의 가장 가능성있는 버전 1.2.2)에서 설치했습니다. ,마스터 비밀번호를주지 않고 Windows에서 키링에 액세스 할 수 있습니까?

>>> import keyring 
>>> keyring.set_password('Service', 'MyUsername', 'MyPassword') 

Warning (from warnings module): 
    File "C:\Python27\lib\getpass.py", line 92 
    return fallback_getpass(prompt, stream) 
GetPassWarning: Can not control echo on the terminal. 
Warning: Password input may be echoed. 
Please enter password for encrypted keyring: 

암호를 설정 한 후 :

문제는 내가 내 저장된 암호에 액세스하려고 할 때 (IDLE에서) 다음과 같이, 나는, 키링에 액세스하기 위해 마스터 암호를 설정하라는 메시지가 표시하고 있다는 것입니다 쉘을 다시 시작할 때까지 암호를 쉽게 얻을 수 있습니다. 지금은 다시 마스터 암호를 입력해야합니다 :

>>> ================================ RESTART ================================ 
>>> import keyring 
>>> print keyring.get_password('Service', 'MyUsername') 

Warning (from warnings module): 
    File "C:\Python27\lib\getpass.py", line 92 
    return fallback_getpass(prompt, stream) 
GetPassWarning: Can not control echo on the terminal. 
Warning: Password input may be echoed. 
Please enter password for encrypted keyring: 

마스터 암호를 입력 한 후,이 인증은 다시 시작 사이에/현재 세션 동안에 만 지속됩니다. 명령 줄에서 스크립트를 실행할 때 스크립트가 실행될 때마다 인증해야합니다. 이 시점에서 열쇠 고리는 시간과 노력을 저축하지 못합니다. 암기와 수동 입력에 비해 암호가 더 안전 해지는 것은 아닙니다.

솔루션을 검색 한 후에는 마스터 암호는 사용자 계정의 암호와 같은 경우 자동으로 유닉스 인증합니다 열쇠 고리처럼 보이지만이 Windows에서 나를 위해 작동하지 않았다.

열쇠 고리를 만들려고하지 않습니까? 아니면 구현에 오류가 있습니까?

내 경험은 그가 응용 프로그램 관련 문제의 열쇠 고리에 액세스하려고 암호를 입력하라는 메시지가되지 않는 주장하고 다른 사용자 (들)에 의해보고 그와 충돌 것으로 보인다

, How does python-keyring work on Windows?

+0

답변이 없지만 비슷한 문제가 발생했습니다.필자는 필자가 파이썬 키링 백엔드 (아마도 keyring.backends.file.BaseKeyring에서 하위 클래스 화)를 구현하고 암호화/암호 해독 메소드를 인증서 기반 스키마로 재정의하고 백엔드를 다음과 같이 구성해야한다고 생각합니다. 허용 된 사용자를 식별하는 인증서를 사용하십시오 – rtmie

+1

어떤 키링 버전을 사용하고 있습니까? 방금 https://bitbucket.org/kang/python-keyring-lib/downloads에서 최신 키링을 다운로드했습니다. IDLE에서 Python2.7을 사용하여 Windows 7에서 시도했습니다. 그것은 당신과 같은 경고를보고하지 않았고, 묻지도 않았습니다. 암호화 된 키링을위한 암호를 입력하십시오 :. 여기에서 잘 작동합니다 – ZZY

+0

@ZZY이 질문이 작성되었을 당시 버전 1.2.2를 사용하고 있었지만 곧 포기하고 사용하지 않았습니다. 이 문제는'pip'를 통해 현재 버전 3.8에서 더 이상 존재하지 않는 것 같습니다. 수표를 보내 주셔서 감사합니다. 답변을 작성하면 현상금에 대한 크레딧을드립니다. – Air

답변

1

사용하는 백엔드 ? 사용 확인 :

>>> from keyring import get_keyring 
>>> get_keyring() 
[... what is output here?] 

그것을이 출력하는 경우가 암호를 요구하고 그 이유는 다음

<keyring.backends.file.EncryptedKeyring object at 0x.....> 

합니다. 이 모듈은 사용할 수있는 모든 플랫폼 특정 열쇠 고리를 찾지 못했습니다, 그래서 대신 마스터 암호를 사용하여 암호를 암호화하고 일반 파일로 배치합니다.

는 개인적으로, 내 스크립트 내 암호가 안전하다는 것보다 자동 실행하는 것이 나에게 더 중요한, 그래서이 함수를 쓴 :이 기능 configureKeyring()을 실행 set_password 또는 get_passwordkeyring를 사용하기 전에

def configureKeyring(): 
    """ 
    EncryptedKeyring requires a master password to unlock it, which is not ideal 
    for our scripts since we want them to run unattended. So if we're using 
    EncryptedKeyring, automatically swap to a PlaintextKeyring instead. 

    If we're using something else, say WinVaultKeyring, then that's more secure 
    than PlaintextKeyring without being any less convenient, so we'll use it. 
    """ 
    from keyring    import get_keyring, set_keyring 
    from keyring.backends.file import EncryptedKeyring, PlaintextKeyring 

    if isinstance(get_keyring(), EncryptedKeyring): 
     set_keyring(PlaintextKeyring()) 

을, 나처럼, 암호를 안전하게 유지하는 것보다 마스터 암호를 삽입 할 필요가 없다고해도 좋습니다. 이 작업을 수행하기 전에 비밀번호를 일반 텍스트로 저장한다는 보안상의 의미를 이해하십시오.

보다 나은 장기적인 솔루션은 다른 모든 백엔드를 조사하고 적절한 사전 준비 사항을 설치하여 마스터 암호를 입력 할 필요가없고 로그인하는 것으로 충분합니다.

+0

이상하지만, 백엔드가 없습니다. 파일. 백엔드입니다 .SecretService 및 기타. 그러나 기본 키링으로 설정하는 방법을 찾지 못했습니다. 'backend.get_all_keyring()'은 저에게'[ /.local/share/python_keyring/keyring_pass.cfg>, 을 제공하기는하지만 PlaintextKeyring은 없습니다. , /.local/share/python_keyring/crypted_pass.cfg>]' – antonavy

관련 문제