Неинтерактивные сеансы 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
для подключения, чтобы он извлекал и вводил пароль автоматически.