запущенная команда на удаленном хосте ssh не работает при запуске внутри скрипта

Ситуация: Мой компьютер работает на Kubuntu 14.04. Я администратор дома студентов с некоторыми Netgear-AP. Идея состоит в том, чтобы сценарий перезагружал их все одним сценарием. (ssh-key невозможен)

Ситуация: Команда ssh на хосте отлично работает с оболочкой.

Описание: У меня есть скрипт на моем компьютере: «path / to / localScript»

#!/bin/bash

echo "Hello mister"
reboot

теперь, если я введу следующее непосредственно в my shell

    sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] < PATH/TO/LOCALSCRIPT

Я получаю вывод

Pseudo-terminal will not be allocated because stdin is not a terminal.
Hello mister
Connection to HOST closed by remote host.

, и AP фактически перезагружается! Я пробовал другие команды (например, ping) -> все работало нормально. Теперь я хочу сделать то же самое, но внутри скрипта (так что я могу позже добавить все остальные точки доступа тоже;)) Поэтому я попробовал скрипт «rebootThemAll»

#!/bin/bash

echo " Rebooting AP 1"
sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] < PATH/TO/LOCALSCRIPT

Я получаю вывод [ ! d12]

 Rebooting AP1 
Pseudo-terminal will not be allocated because stdin is not a terminal.

и ... ничего больше не происходит. Снова я вижу приглашение на ввод строки оболочки, чтобы сценарий остановился. Я также попробовал более 1 AP, чтобы проверить, не отменяет ли эта ошибка мой скрипт, но это не так. Для большего количества точек доступа вывод выглядит так:

 Rebooting AP1
Pseudo-terminal will not be allocated because stdin is not a terminal.
 Rebooting AP2
Pseudo-terminal will not be allocated because stdin is not a terminal.
 Rebooting AP3
Pseudo-terminal will not be allocated because stdin is not a terminal.
 Rebooting AP4
......

, но сценарий не запускается. Он не показывает «Привет, господин», и они не перезагружаются.

У любого есть идея?

1
задан 25 June 2015 в 21:12

1 ответ

Попробуйте следующее:

sshpass -p '[MYPASSWORD]' ssh [USER]@[HOST] 'bash -s' < PATH/TO/LOCALSCRIPT

Кажется, что команда нужна в случае, когда терминал вообще отсутствует.

(найдено здесь)

1
ответ дан 23 May 2018 в 19:29
  • 1
    wow извините за эту позднюю реформу .. долго не возвращался Спасибо за ваш ответ! Я мог бы решить эту проблему, используя опцию -T " Отключить псевдотерминальное распределение. & Quot; и используя Scriptfiles без строки #! / bin / bash, так что просто началось с эха " check " перезагружать – derHugo 27 July 2016 в 20:22

Другие вопросы по тегам:

Похожие вопросы: