Существует ли способ поддержать возможность соединения ssh-агента на различных экранах?

Регулярное решение

В принципе, решения выше:

  • установка, обеспеченная рабочим столом управление питанием - или xset -dpms ; xset s off для одноразового теста
  • отключение/удаление, обеспеченное рабочим столом экранную заставку и проверка/уничтожение существующей, чтобы быть уверенным (как pgrep screensaver и т.д.)

... должен быть достаточно.

Не добавлять acpi=off для расчистки для этого это вне темы здесь.

Более сильное решение

Если все остальное перестало работать, или Вы просто хотите сделать это однажды, не изменяя все настройки назад и вперед, можно обратиться к взломам.

Например, можно установить xdotool (на Debian или Ubuntu sudo apt-get install xdotool и Вы сделаны). Этот инструмент может моделировать нажатия клавиш, которые предотвратят экранную заставку и очищающий точно так же, как нормальное действие делает.

Эта командная строка моделирует нажатие и выпуск сдвига влево каждые 30 секунд:

while sleep 30 ; do xdotool keydown Shift_L keyup Shift_L ; done

Я время от времени использую это, и это работает отлично. Это также эффективно при препятствовании тому, чтобы подсветка жидкокристаллического экрана ноутбука потускнела.

(Вы могли бы хотеть изменить ключ, моделируемый, если нажатие Left-Shift могло бы нарушить сфокусированное приложение.)

Предупреждение

Не позволяйте ему слишком долго из страха повреждения Вашего экрана (большинство технологий экранов, при отображении постоянного высокого-constrast изображения в течение долгого времени, в конечном счете напрягайте экранные элементы постоянно. В результате на плоских цветных областях остаточное позитивное изображение или негатив появляются).

3
07.05.2013, 23:50
4 ответа

Я использую keychain управлять моим ssh-agent переменные среды, и это имеет дело с проверкой, что только один агент работает за один раз. От моего .bashrc на соответствующих машинах:

# is this an interactive shell?
if [[ $- == *i* ]]; then
    # set up ssh key server
    if [[ -x /usr/bin/keychain ]]; then
        eval $(keychain --eval --ignore-missing the <keys I want>)
    fi
fi

Это хранит переменные среды в ~/.keychain, выполняет агент, если это не найдено и возвращает новые или существующие переменные eval. Я установил его несколько лет назад и не коснулся его. Если Вы имеете ssh-askpass установленный, это сможет запросить пароль в среде X11, даже когда оболочка рабочая связка ключей не видима (такие как сценарии X11 init).

Существуют другие способы использовать его, но это работает на меня через несколько рабочих станций Linux, включая вхождение в рабочую станцию от удаленного, когда в меня не входят X11 там.

2
27.01.2020, 21:14

Да, ssh использует переменную SSH_AUTH_SOCK для доступа к агенту.

Если Вы запустите различные агенты на различных сессиях, то они не совместно используют ключи.

Выполненный ssh-agent видеть переменные, установленные этим экземпляром.

Читать man ssh-agent узнать о возможных вариантах. (Особенно-a должен быть полезным в Вашем случае.)

Лучший способ совместно использовать один агент в значительной степени зависит от Вашей ситуации. Необходимо удостовериться, что один и только один агент работает, и что всем сессиям установили среду для использования его.

При использовании некоторой настольной среды, это обычно запускает ssh-агент и устанавливает среду для предоставления доступа к ней доступной для всех процессов запущенный в настольной сессии. - Если Вы хотите совместно использовать новый агент для всех Ваш screen сессии можно запустить экран как ssh-agent screen. - Если Вы хотите к ssh в поле и получаете доступ к своему агенту, это также возможно, но Вы самостоятельно.

2
27.01.2020, 21:14

Можно сделать сценарий для общего процесса входа в систему который

  1. проверки, если по крайней мере один экземпляр ssh-агента работает (за этим пользователем)
  2. выбирает экземпляр, который будет использоваться (самое старое)
  3. проверки, доступна ли информация о сокете для этого процесса (и корректна),
  4. в случае успеха берет эту информацию в ее собственной среде
  5. и возможно уничтожает другие экземпляры (по крайней мере, его собственное, если существует один),
ps -o pid,etime,args --no-headers --sort=start_time \
  -p $(pgrep --uid $USER ssh-agent) | 
    awk '{print $1; exit;}'

дает Вам PID самого старого экземпляра ssh-агента. Это было бы легче с pgrep --uid $USER --oldest ssh-agent но этот путь Вы легко получаете PIDs других экземпляров, также.

Вы могли записать $SSH_AUTH_SOCK в файле ~/.ssh/env/$PID (если $SSH_AGENT_PID из текущего процесса равняется $PID):

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.ssh/env/$PID

Другие сессии могли проверить, существует ли файл и все еще допустим, и импортируйте его:

bash -c 'test -e ~/.ssh/env/$PID || exit 1;
  . ~/.ssh/env/$PID; test -e $SSH_AUTH_SOCK' && . ~/.ssh/env/$PID
2
27.01.2020, 21:14

Используйте отличный ssh-identity , который поддерживает несколько идентификаторов для дополнительной безопасности.

Это дополнительная оболочка для ssh , scp :

ln -s /usr/bin/ssh-ident ~/bin/ssh
ln -s /usr/bin/ssh-ident ~/bin/scp

Существует множество самостоятельных ответов , но зачем -изобрести колесо?

0
27.01.2020, 21:14

Теги

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