Неинтерактивные сеансы SSH
Если вам не нужен интерактивный сеанс на удаленном сервере, вы можете выполнить ssh в среде без tty , например, как часть действия Run Shell Script в 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 для подключения, чтобы он извлекал и вводил пароль автоматически.