Сценарий к ssh и выполненный команда не работает

Что это, Вы пытаетесь сделать? Я вид сомнения там является готовым инструментом, чтобы сделать это, но существую несколько платформ, которые возможно позволяют Вам создать то, что Вы ищете (с небольшим изучением, небольшой работой и надо надеяться некоторой забавой).

В зависимости от Ваших предпочтений и предварительных знаний, один или другие из них могло бы быть полезно для Вас:

Обработка, "язык программирования с открытым исходным кодом и среда для людей, которые хотят создать изображения, анимации и взаимодействия"; подобный Java.

Если Вы предпочитаете C++, взглянули на openFrameworks, "инструментарий C++ с открытым исходным кодом для творческого кодирования" (который может встроить Lua).

И существуют Чистые Данные, "графическая среда программирования в реальном времени для аудио, видео и графической обработки", которая с GEM также допускает вывод графических данных (см. эту flossmanual часть).

Существует также Зола, "разработанная сообществом, свободная и библиотека с открытым исходным кодом для профессионального качества творческое кодирование в C++", который, кажется, не имеет поддержку Linux, хотя (шикают ого-го),

Существует намного больше проектов как они (например, если Ваша вещь Python, я сомневаюсь, там не был сделан что-то похожее с Python), просто взгляните в этой нише.

Править

Из Вашего комментария я советовал бы другому способу заняться проблемой: Используйте разделенный вниз рабочий стол X11 с простым менеджером окон (или ни один вообще, с помощью geometry настройки) и инструменты для различных задач, например.

  • VLC (или MPlayer, Xine...) для отображения телевизионного вывода карты и/или видео
  • некоторая программа просмотра изображений для циклического повторения (если это - то, что Вы хотите), канавка Ваши изображения
  • (что-то для пунктирной рамки... хм... никакая идея, извините)

И внимательно рассмотрите в Webconverger. Если у Вас есть деньги для расходов, посмотрите на Неон Webconverger. (Мог бы быть намного больше для высказывания о цифровых решениях для обозначения, но я только знаю об этом.)

10
23.08.2014, 14:49
6 ответов

Stdin недоступен для ваших удаленных команд. Что вы можете сделать, так это использовать флаг "-s" в bash для чтения команд из stdin:

Из руководства по bash:

-s        If the -s option is present, or if no arguments remain after
          option processing, then commands are read from the standard 
          input.  This option allows the positional parameters to be set
          when  invoking  an  interactive shell.

Так что это должно сделать то, что вы хотите:

#!/bin/bash
#input server names line by line in server.txt
cat server.txt | while read line
do
    sshpass -p password ssh root@$line bash -s << EOF
hostname
uname -r
EOF
done

См. также: https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine

1
27.01.2020, 20:01
[

] Используйте следующий код, [

] [
#!/bin/bash
#input server names line by line in server.txt
cat server.txt | while read line
do
  sshpass -p password ssh root@$line 'hostname;uname -r'
done
]
4
27.01.2020, 20:01
[

]Если ваши хосты хранятся следующим образом в []server.txt[] [

] [
host1.tld
host2.tld
....
] [

]Вы можете[

] [
mapfile -t myhosts < server.txt; for host in "${myhosts[@]}"; do ssh username@"$host" 'hostname;uname -r'; done
]
1
27.01.2020, 20:01

Я не могу сказать вам, почему вы не получаете ожидаемый результат от команд hostname и uname , но я могу помочь с посторонний текст.

Строки «Псевдотерминала» печатаются ssh , потому что он пытается выделить TTY по умолчанию, когда в командной строке не было задано никаких команд для выполнения. Вы можете избежать этого сообщения, добавив «-T» к команде ssh:

sshpass -p password ssh -T root@$line

Строка «Предупреждение: нет доступа к tty» не поступает из оболочки удаленной системы. csh и tcsh при определенных обстоятельствах распечатает это сообщение. Возможно, это вызвано чем-то в .cshrc или подобном файле в удаленной системе, пытаясь получить доступ к какой-либо функции, для которой требуется TTY.

10
27.01.2020, 20:01

Я полагаю, что ssh в это время съедает остаток на stdin. Вы можете обратиться к FAQ 89 Bash для подробностей. При использовании FileDescriptor следующие коды должны работать, как вы ожидаете.

while read line <& 7
do
sshpass -p password ssh root@$line << EOF
hostname
uname -r
EOF
done 7< server.txt
0
27.01.2020, 20:01

Это отлично работает для меня:

 # cat hostsname.txt 
operation01  172.20.68.37 5fDviDEwew
ngx-gw01     172.20.68.36 FiPp2UpRyu
gateway01    172.20.68.35 KeMbe57zzb
vehicle01    172.20.68.34 FElJ3ArM0m

# cat hostsname.txt | while read hostname ipaddr passwd; do sshpass -p $passwd /usr/bin/ssh-copy-id $ipaddr;done

обратите внимание, что используйте -t -t вместо -T , чтобы избежать ошибки.

Псевдотерминал не будет выделен, потому что stdin не является терминалом

1
27.01.2020, 20:01

Теги

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