Пароль от брелока для ключей: Python get_password возвраты перед паролем брелока для ключей вводится

(РЕДАКТИРОВАНИЕ)

Это, кажется, связано с https://github.com/maebert/jrnl/issues/478, я получаю ту же ошибку.

Извините за не замечать его ранее, был уже разблокирован брелок для ключей, когда я тестировал его в консоли. Я предполагаю, что это означает, что Вы не можете использовать брелок для ключей от специальной команды Python?

(/РЕДАКТИРОВАНИЕ)


Это - последующий вопрос Вам, может использовать брелок для ключей гнома в сценарии удара, если да затем как?

На основе ответа там, я использую эту строку в сценарии удара:

[[ -z $TARGET ]] || PASS=`python -c "import keyring; print(keyring.get_password(\"$TARGET\", \"(printf '%q' $USERNAME)\"))"`

Это работает, за исключением первого раза это называют на сессии. Затем это возвращается, в то время как подсказка пароля брелока для ключей Python все еще отображается, прежде чем у меня было время для ввода его. В результате я получаю две подсказки пароля на экране одновременно, один для пароля брелока для ключей и один от yad.

Названный снова позже на той же сессии, эта строка возвращается, сохраненный пароль как она должен.

То, что я пытаюсь сделать, получают пароль для пользовательского $USER, для xfreerdp сессии к хосту Windows, от брелока для ключей, если $TARGET установлен, или только продолжите иначе. Следующий шаг проверяет, установлен ли $PASS. В противном случае или если это не содержит 'Ни один', это запускает YAD для отображения диалогового окна для запроса его. '%q' printf формат должен допускать обратную косую черту в имени пользователя (domain\user).

Что-то может быть сделано для создания этого блокированием, когда пароль брелока для ключей не был введен ранее?

В случае, если кому-то интересно, это - полный сценарий. Это предназначается, чтобы быть названным из других сценариев и возвращает пароль и имя пользователя в переменных $\\$USERVAR и $\\$PASSVAR, таким образом, фактические имена переменной могут быть переданы сценарием выполнения вызова. #echo отлаживает помощников, которых я прокомментировал.

#!/bin/bash

SAVE=FALSE

case $# in
1)
   USERVAR=USER
   PASSVAR=PASS
   USERNAME=$1
   ;;
3)
   USERVAR=$1
   PASSVAR=$2
   USERNAME=$3
   ;;
4)
   USERVAR=$1
   PASSVAR=$2
   USERNAME=$3
   TARGET=$4
   ;;
*)
   echo '
getpasswd: invalid number of arguments.

Presents a username and password prompt dialog, with keyring support.
The user can accept the offered username or change it, and enter a password.

Use: getpasswd [usernamevar passwordvar] initial_username [targetname]

     usernamevar defaults to USER
     passwordvar defaults to PASS
     User name and password will be returned in usernamevar and passwordvar

     If targetname is specified,
     - the password wil be taken from the keyring if the user/target combination exists.
     - if the combination does not exist, the caller will be prompted
   and given the option to store it in the keyring.
'
   exit 1
   ;;
esac

#echo USERVAR=$USERVAR
#echo PASSVAR=$PASSVAR
#echo USERNAME=$USERNAME
#echo TARGET=$TARGET

[[ -z $TARGET ]] || PASS=`python -c "import keyring; print(keyring.get_password(\"$TARGET\", \"(printf '%q' $USERNAME)\"))"`

#echo from keyring: $PASS

if [[ -z $PASS || $PASS == "None" ]]
then
   if [[ -z $TARGET ]]
   then
      FORM=$(yad --center --width=380 \
         --window-icon="gtk-execute" --image="gcr-password"\
         --title "Login" \
         --form --field="User name" "$USERNAME"\
         --field="Password":H\
         --focus-field=2)
   else
      FORM=$(yad --center --width=380 \
         --window-icon="gtk-execute" --image="gcr-password"\
         --title "Login" \
         --form --field="User name" "$USERNAME"\
         --field="Password":H\
         --field="Save in keyring?":CHK\
         --focus-field=2)
      printf -v SAVE "%s" $(echo $FORM | awk -F '|' '{ print $3 }')
   fi
   #echo $FORM
   printf -v USERNAME "%s" $(echo $FORM | awk -F '|' '{ print $1 }')
   printf -v PASS "%s" $(echo $FORM | awk -F '|' '{ print $2 }')
fi

#echo eval $USERVAR=$(printf '%q' $USERNAME)
#echo eval $PASSVAR=$(printf '%q' $PASS)
eval $USERVAR=$(printf '%q' $USERNAME)
eval $PASSVAR=$(printf '%q' $PASS)

#echo .
#echo TARGET=$TARGET
#echo USERNAME=$USERNAME
#echo PASS=$PASS
#echo SAVE=$SAVE

if [[ -n $TARGET && -n $PASS && $PASS != "None" && $SAVE != "FALSE" ]]
then
   #echo saving to keyring
   python -c "import keyring; keyring.set_password(\"$TARGET\", \"(printf '%q' $USERNAME)\", \"$PASS\")"
fi

Назовите его как (например, замените имена и путь как соответствующие),

. getpasswd USER PASS domain\\user computername
[[ -z $PASS || $PASS == "None" ]] && exit 1
xfreerdp /v:hostname_or_ip /f /u:$USER /p:$PASS /cert-ignore +fonts /drive:ubuntu-home,$HOME /printer
0
задан 29 September 2018 в 01:00

1 ответ

Я заставил это прокладывать себе путь, я разыскиваемый перезаписью Python управляю в Perl. Вместо одной строки я поместил его в отдельный файл:

#!/usr/bin/perl
use Passwd::Keyring::Gnome;
print Passwd::Keyring::Gnome->new()->get_password($ARGV[0], $ARGV[1]);

Это не на 100% совместимо, я должен восстановить пароли на брелоке для ключей с помощью подобной команды с set_password.

Они появляются в брелоке для ключей (у Морского конька) с описанием как 'Passwd:: Брелок для ключей несекретные пароли/цель/имя пользователя (Passwd:: Брелок для ключей)' вместо 'Пароля для имени пользователя на цели'. Я не мог заставить это находить старые пароли путем проигрывания с аргументами новому () также, как я так или иначе ожидал.

0
ответ дан 27 October 2019 в 09:54

Другие вопросы по тегам:

Похожие вопросы: