Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 远程SSH-执行cat并读取输入_Bash_Ssh_Scripting_Remote Access_Remote Server - Fatal编程技术网

Bash 远程SSH-执行cat并读取输入

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连接后从本地控制台获取数据。如果我要使用读取,这

我已经编写并正在使用以下脚本snippit:

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"'