Неінтерактивні сеанси SSH
Якщо вам не потрібно проводити інтерактивний сеанс на віддаленому сервері, його можна виконати sshв середовищі без tty, наприклад, в рамках дії Run Shell Script в Automator .
Вам потрібно створити програму, яка при виклику роздруковує пароль для стандартного виходу, наприклад, наступний сценарій bash, який потрібно зробити виконуваним за допомогою chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
Потім встановіть SSH_ASKPASSзмінну оточення до шляху до цієї програми, а потім запустіть sshв Автоматизаторі дію, як це:
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встановлення працює!