Bash 远程SSH-执行cat并读取输入
我已经编写并正在使用以下脚本snippit:Bash 远程SSH-执行cat并读取输入,bash,ssh,scripting,remote-access,remote-server,Bash,Ssh,Scripting,Remote Access,Remote Server,我已经编写并正在使用以下脚本snippit: ssh-t root@$host bash-c“ echo \“已连接到服务器$host\” echo \“粘贴数据并按Ctrl+D \” 数据=$(cat) 回声“成功\" echo$数据 “ 它在没有cat行的情况下工作正常,并按顺序执行 对于cat行,它在任何回显之前挂起以进行输入,然后当您Ctrl+D时,它执行其余的命令 我怎样才能让它按预定顺序运行 编辑: 为了清楚起见,我只是尝试在建立SSH连接后从本地控制台获取数据。如果我要使用读取,这
ssh-t root@$host bash-c“
echo \“已连接到服务器$host\”
echo \“粘贴数据并按Ctrl+D \”
数据=$(cat)
回声“成功\"
echo$数据
“
它在没有cat
行的情况下工作正常,并按顺序执行
对于cat行,它在任何回显之前挂起以进行输入,然后当您Ctrl+D
时,它执行其余的命令
我怎样才能让它按预定顺序运行
编辑:
为了清楚起见,我只是尝试在建立SSH连接后从本地控制台获取数据。如果我要使用读取
,这会很好地工作并提示。但是,如果我使用“$(cat)”(在本地可以正常工作),我就有问题了
我正在尝试在SSH连接后接收多行文本。我正在使用
$(cat)
按照进行此操作,它在本地运行良好,但在通过SSH的远程命令中似乎不起作用。1-在
连接中使用,如下所示:
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
读取时通过端口用户ip文件输入文件输出文件温度;做
sshpass-p$pass ssh-o'strichostkeychecking no'-p$port$user@$ip fileinput=$fileinput fileoutput=$fileoutput filetemp=$filetemp'bash-s'1-在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
读取时通过端口用户ip文件输入文件输出文件温度;做
sshpass-p$pass ssh-o'StrictHostKeyChecking no'-p$port$user@$ip fileinput=$fileinput fileoutput=$fileoutput filetemp=$filetemp'bash-s'在开始时出现cat
的原因是您使用了双引号。$(cat)
在运行ssh
命令之前在本地计算和执行。为了防止出现这种情况,请改用单引号。(我同时还冒昧地简化了一些。)
(第一个echo
是双引号,以允许本地扩展$host
;然后我们切换到单引号,以保护命令行的其余部分不受本地扩展的影响。)之所以在开始时出现cat
,是因为您使用了双引号。$(cat)
在运行ssh
命令之前在本地计算和执行。为了防止出现这种情况,请改用单引号。(我同时还冒昧地简化了一些。)
(第一个echo
用双引号括起来,以允许本地扩展$host
;然后我们切换到单引号以保护命令行的其余部分不受本地扩展的影响。)我不太理解您的第一个示例,它看起来太复杂了,我假设python和循环不需要?后者(使用两个波浪号)会导致与最初相同的问题。是的……如果您想运行命令,如运行python或在linux上运行命令,如cat
,并且如果它有一个变量,您应该这样做……它肯定会工作……您如何看待第二个?[cat应该有输入文件]您的第三个解决方案非常适合执行远程命令,但是我仍然对$(cat)和顺序有问题,与以前的问题相同。请参阅$(cat)是错误的。$(cat文件)和cat文件
都是正确的…尝试使用data=cat文件
将cat置于`和`之间,当它回答问题时,我肯定会对答案投赞成票!:)我不太理解您的第一个示例,它看起来太复杂了,我假设python和循环是不需要的?后者(使用两个波浪号)会导致与最初相同的问题。是的……如果您想运行命令,如运行python或在linux上运行命令,如cat
,并且如果它有一个变量,您应该这样做……它肯定会工作……您如何看待第二个?[cat应该有输入文件]您的第三个解决方案非常适合执行远程命令,但是我仍然对$(cat)和顺序有问题,与以前的问题相同。请参阅$(cat)是错误的。$(cat文件)和cat文件
都是正确的…尝试使用data=cat文件
将cat置于`和`之间,当它回答问题时,我肯定会对答案投赞成票!:)还要注意,echo“$data”
需要有双引号,以便在输入中保留换行符等。太棒了,这正好完成了这项工作!评估也有意义,因为它是双引号。谢谢还要注意,echo“$data”
需要有双引号,以便在输入中保留换行符等。太棒了,这正好完成了这项工作!评估也有意义,因为它是双引号。谢谢
#!/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
ssh -t root@$host "echo 'Connected to server $host'"';
echo "Paste in data and hit Ctrl + D"
data=$(cat)
echo "Success!"
echo "$data"'