Могу ли я автоматически войти в ssh, используя пароли из Связки ключей OS X?

мне нужно войти на сервер ssh, который не поддерживает аутентификацию на основе ключа. И я не хочу каждый раз вводить пароли.

Я использую OS X Lion (10.7.2). Я добавил пароли к связке ключей OS X[1]. Теперь я могу получить пароль автоматически из Связки ключей с помощью /usr/bin/security, однако я не могу найти способ отправить этот пароль в приглашение ssh.

Я тоже пробовал sshpass. Однако, когда я пытаюсь запустить его, ssh выходит с следующая ошибка:

ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied (publickey,password).

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

Примечания

  1. схему я использую в брелок выглядит так
    • вид: Internet password
    • аккаунт: username
    • где: ssh: / / server-name
19
задан Chaitanya Gupta
12.05.2023 4:02 Количество просмотров материала 2731
Распечатать страницу

2 ответа

неинтерактивные сеансы SSH

Если вам не нужно иметь интерактивную сессию на удаленном сервере, вы можете выполнить ssh в среде без tty, например, как часть Выполнить Скрипт действий Automator.

вам нужно создать программу, которая при вызове выводит пароль на стандартный выход, например, следующий скрипт bash, который вам нужно сделать исполняемым с помощью chmod +x pwd.sh:

#!/usr/bin/env bash
echo "password"

затем установите the SSH_ASKPASS переменная окружения путь к этой программе, а затем запустите ssh в действии Automator, как это:

export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls

когда нет tty, а SSH_ASKPASS и DISPLAY (для X11, установлено по умолчанию), SSH выполняет программу, указанную SSH_ASKPASS и использует его вывод в качестве пароля. Это предназначено, чтобы использоваться в графических средах, так,чтобы окно могло выскочить запрос пароля. В этом случае мы просто пропустили окно, вернувшись пароль от нашей программы. Вы можете использовать security читать из брелка вместо этого, как это:

#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2

ls (на ssh командная строка) - команда выполняется, когда ssh вошел в систему, и его вывод печатается в Automator. Можно, конечно, перенаправить его в файл журнала программы запуска.


интерактивные сеансы SSH с помощью sshpass

я скачал, скомпилировал и установил sshpass и это работать отлично. Вот что я сделал:

  1. получить инструменты разработчика Apple
  2. скачать и открыть sshpass-1.05.tar.gz
  3. открыть оболочку в директорию sshpass-1.05
  4. Run ./configure
  5. Run make
  6. Run make install (вам может понадобиться sudo за это)

теперь программа установлена в /usr/local/bin/sshpass. Выполните с помощью следующей строки:

sshpass -pYourPassword ssh username@hostname

вы можете прочитать пароль от security непосредственно перед этим, и использовать его следующим образом:

SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname

оберните это в функцию оболочки, и вы можете просто ввести, например,ssh-yourhostname для подключения, имея его получить и ввести пароль автоматически.

10
отвечен Daniel Beck 2023-05-13 11:50

я нашел решение (Спасибо Даниэлю Бэку за предоставление ключевой информации, необходимой для этого). Обратите внимание, что я тестировал это только с OS X Lion 10.7.2. Если это не работает для вас, попробуйте решение Дэниела.

Сначала нам нужно установить SSH_ASKPASS переменная окружения -- ее значение должно быть путем к программе, которая выводит пароль на стандартный вывод. Чтобы получить пароль от связки ключей, вот как он должен выглядеть (я называю его get-ssh-password.sh):

#!/bin/bash

/usr/bin/security find-internet-password -a "$SSH_PASSWORD_USER" -s "$SSH_PASSWORD_HOSTNAME" -r "ssh " -g 2>&1 1>/dev/null | cut -d\" -f2

пару моментов, чтобы отметить:

  1. это предполагает, что вы сохранили пароль в связке ключей в так, как я описал в вопросе

  2. программа приведена в SSH_ASKPASS будет вызываться без аргументов, поэтому мы используем переменные окружения для передачи пользователя и имени хоста.

теперь мы можем установить SSH_PASSWORD_USER и SSH_PASSWORD_HOSTNAME и работать sshpass для входа в наш сервер.

я создал еще один скрипт ssh-kcpass для этого:

#!/bin/bash

export SSH_ASKPASS=~/bin/get-ssh-password.sh
export SSH_PASSWORD_USER=$(echo "" | cut -d@ -f1)
export SSH_PASSWORD_HOSTNAME=$(echo "" | cut -d@ -f2)

sshpass ssh ""

для входа на сервер по SSH без ввода пароля, вам просто нужно запустить ssh-kcpass user@hostname.

7
отвечен Chaitanya Gupta 2023-05-13 14:07

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх