Неінтерактивні сеанси 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
встановлення працює!