Неинтерактивные сеансы SSH
Если вам не нужен интерактивный сеанс на удаленном сервере, вы можете выполнить его ssh
в среде без tty
, например, в рамках действия « Выполнить сценарий оболочки» в Automator .
Вам нужно создать программу, которая при вызове печатает пароль для стандартного вывода, например, следующий скрипт bash, который вы должны сделать исполняемым с помощью chmod +x pwd.sh
:
#!/usr/bin/env bash
echo "password"
Затем задайте для 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
и он работал отлично. Вот что я сделал:
- Получить инструменты разработчика Apple
- Скачать и открыть
sshpass-1.05.tar.gz
- Откройте оболочку в каталог
sshpass-1.05
- Запустить
./configure
- Запустить
make
- Беги
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
для подключения, чтобы он извлекал и вводил пароль автоматически.
STDIN is not a terminal
. 2) Для интерактивных сессий сsshpass
, то-p
вариант , видимо , ничего не делает. Но бег,sshpass
покаSSH_ASKPASS
настроен, работает!STDIN is not a terminal
ошибку. Однако на этот раз мне не предложили ввести пароль; Я верю,SSH_ASKPASS
что работает в Automator, так как, если я сделаю файлSSH_ASKPASS
взамен неправильного пароля, я получуPermission denied, please try again.
ошибку.macOs >= 10.13
Я нашел решение (спасибо Дэниелу Беку за предоставление ключевой информации, необходимой для этого). Обратите внимание, что я проверял это только с OS X Lion 10.7.2. Если это не работает для вас, попробуйте решение Дэниела.
Сначала нам нужно установить
SSH_ASKPASS
переменную окружения - ее значением должен быть путь к программе, которая выводит пароль на стандартный вывод. Чтобы получить пароль из цепочки для ключей, вот как это должно выглядеть (я называю этоget-ssh-password.sh
):Несколько замечаний:
Это предполагает, что вы сохранили пароль в цепочке для ключей так, как я описал в вопросе
Данная программа
SSH_ASKPASS
будет вызываться без каких-либо аргументов; поэтому мы используем переменные окружения, чтобы передать ему имя пользователя и имя хоста.Теперь мы можем установить
SSH_PASSWORD_USER
иSSH_PASSWORD_HOSTNAME
запустить приложениеsshpass
для входа на наш сервер.Я создал другой скрипт
ssh-kcpass
, чтобы сделать это:Чтобы войти на сервер ssh без ввода пароля, вам просто нужно запустить
ssh-kcpass user@hostname
.источник
macOS >= 10.13
Привет, люди, с которыми я сталкивался в этой теме в поисках чего-то другого, но ... Не знаю, упускаю ли я что-то здесь ... но ваш подход кажется мне странным. почему бы просто не использовать аутентификацию с открытым ключом ... Сгенерировать ключ rsa $ ssh-keygen -t rsa -b 2048 -C 'email / id'
В идеале вы должны использовать один раз ssh-copy-id user @ host и один раз аутентифицироваться с паролем, чтобы установить ключ на другом сервере, или использовать любой вид сценария или средства автоматизации для развертывания ключа в ~ / .ssh / authorized_keys на другой хост (для пользователя, к которому вы хотите авторизоваться). Если вы выполнили команду вручную, вам нужно соответствующим образом отредактировать / etc / ssh / sshd_config, а с помощью автоматизации (chef, ansible) вы получите полную кондигу для желаемого состояния.
Ключ, который имеет значение для распространения, это id_rsa.pub, храните закрытый ключ в безопасности.
Чтобы использовать связку ключей для аутентификации на хостах в автоматическом режиме, отредактируйте на вашем компьютере файл ~ / .ssh / config и добавьте:
Host * UseKeychain да
Ищите дополнительную информацию о параметрах конфигурационного файла ssh, надеюсь, что все это пригодится
источник