远程SSH - 执行cat和读取输入

时间:2014-03-12 05:49:56

标签: bash ssh scripting remote-access remote-server

我已经编写了以下脚本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在远程命令中工作。

2 个答案:

答案 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