Неинтерактивные сеансы 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настроен, работает!