Удаленный SSH - выполнение ввода cat и чтение

У меня есть следующий фрагмент сценария, который я написал и использую:

ssh -t root@$host bash -c "' echo \"Connected to server $host\" echo \"Paste in data and hit Ctrl + D\" data=$(cat) echo \"Success!\" echo $data '"

Работает нормально без cat линия и выполняется по порядку.

С кошачьей линией она зависает для ввода перед любым эхом, а затем, когда вы Ctrl + D он выполняет остальное.

Как я могу заставить это бежать назад в намеченном порядке?

РЕДАКТИРОВАТЬ:

Для ясности я просто пытаюсь получить данные с локальной консоли после установления SSH-соединения. Если бы я должен был использовать read, это работает нормально и подсказывает. Но если я использую "$(cat)" (который работает локально), у меня возникают проблемы.

Я пытаюсь взять несколько строк текста после подключения SSH. я использую $(cat) сделать это по ссылке, которая отлично работает локально, но не работает в удаленных командах через SSH.

2 ответа

Решение

Причина cat происходит в начале, потому что вы используете двойные кавычки. $(cat) оценивается и выполняется локально до ssh команда работает. Чтобы предотвратить это, используйте вместо этого одинарные кавычки. (Я позволил себе упростить немного больше в то же время.)

ssh -t root@$host "echo 'Connected to server $host'"';
    echo "Paste in data and hit Ctrl + D"
    data=$(cat)
    echo "Success!"
    echo "$data"'

(Первый echo в двойных кавычках, чтобы позволить $host быть расширенным на местном уровне; затем мы переключаемся на одинарные кавычки, чтобы защитить остальную часть командной строки от локального расширения.)

1- Использование variables в ssh соединение будет примерно таким:

while read pass port user ip fileinput fileoutput filetemp; do
     sshpass -p$pass ssh -o 'StrictHostKeyChecking no' -p $port $user@$ip fileinput=$fileinput fileoutput=$fileoutput filetemp=$filetemp 'bash -s'<<ENDSSH1
     python /path/to/f.py $fileinput $fileoutput $filetemp
     ENDSSH1
done  <<____HERE1
     PASS    PORT    USER    IP    FILE-INPUT    FILE-OUTPUT    FILE-TEMP
____HERE1

Таким образом, вы можете изменить этот скрипт так, как вы хотите.

2- Вы не можете изменить свой сценарий таким образом?

ssh -t root@$host bash -c "'
   echo \"Connected to server $host\"
   echo \"Paste in data and hit Ctrl + D\"
   data=`cat <input-file>`
   echo \"Success!\"
   echo $data
'"

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

#!/bin/bash

SCRIPT='
<put your commands here>
'

while read pass ip; do
    sshpass -p$pass ssh -o 'StrictHostKeyChecking no' -p <port> root@$ip "$Script"
done <<HERE
pass1 ip1
pass2 ip2
pass3 ip3
  .    .
  .    .
  .    .
HERE
Другие вопросы по тегам