Удаленный 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