我已经编写了以下脚本snippit并正在使用:
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
行就可以正常工作并按顺序执行。
使用cat行,它会在任何回声之前挂起以进行输入,然后当你Ctrl + D
执行其余的回声时。
如何让它以预期的顺序运行?
编辑:
为清楚起见,我只是尝试在建立SSH连接后从本地控制台获取数据。如果我要使用read
,这可以正常工作并提示。但如果我使用“$(cat)”(在本地工作正常),我就会遇到问题。
我试图在SSH连接后输入多行文本。我使用$(cat)
按照link执行此操作,这在本地工作正常,但似乎无法通过SSH在远程命令中工作。
答案 0 :(得分:3)
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 :(得分:1)
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