Linux: команда ssh работает вне скрипта bash, но не внутри скрипта?

3161
FernandoSBS

У меня проблема со следующей командой:

echo "Pass for router:" read -s pass  /usr/bin/expect - << EXPCT spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt #echo @pass expect -timeout 10000 "password: " send -- "$pass\n"; expect "#" interact EXPCT 

это возвращает:

Pass for router: spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt root@192.168.10.1's password:  ash: opkg list-installed: not found spawn_id: spawn id exp6 not open while executing "interact" 

Проблема в том, что когда я использую руководство:

ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt 

это работает без нареканий. Некоторые другие моменты:

'opkg list-installed' > list-installed.txt 

Делая это таким образом, он успешно запускает команду opkg list -Installe на удаленном компьютере и сохраняет результат на локальном компьютере. это единственный способ, которым это работает. Если я вхожу по SSH, а затем пытаюсь выполнить эту команду, она не работает, или, если она работает, она сохраняется в удаленном пути.

0

3 ответа на вопрос

0
konqui

попробуйте это так, сначала подключитесь, затем выполните команду на пульте. не прямой пропуск похвалы на связи.

echo "Pass for router:" read -s pass  /usr/bin/expect - << EXPCT spawn ssh 192.168.10.1 -l root opkg list-installed > list-installed.txt #echo @pass expect -timeout 10000 "password: " send -- "$pass\n"; expect "#" interact EXPCT 
не работает вероятно, потому что: `Если я войду с SSH и затем попытаюсь выполнить эту команду, она не будет работать, или, если она работает, она сохранится в удаленном пути`. FernandoSBS 10 лет назад 0
0
Adrien M.

Для чего-то подобного вам следует попробовать SSH Pass или использовать SSH-ключи. Это решило бы вашу проблему с ожидаемым (что похоже на молоток для такого рода вещей).

Таким образом, вы просто запускаете стандартную команду ssh:

sshpass -p $pass ssh root@192.168.10.1 'opkg list-installed' > list-installed.txt 
да, это работает. Я пытался избежать установки sshpass, но после большого количества потерянного времени, я считаю, что это путь. FernandoSBS 10 лет назад 0
0
arp

Что-то, что кусает меня снова и снова: оставляя опцию -n выключенной в ssh, циклически просматривая список имен хостов на stdin

sshopts="-o StrictHostKeyChecking=no -o ConnectTimeout=5 " sshopts+=" -n" # keep it from swallowing stdin  while read remotehostname; do sshpass [...] ssh $ [...] done < $ 

[Вставьте стандартную редакционную статью о том, почему sshpass по своей сути небезопасен, если вы не запрашиваете переменную SSHPASS в интерактивном режиме, и все компетентные системные администраторы не должны шутить, пока их местные правила безопасности не разрешат доступ без пароля через ключи ssh.]

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