如何将本地文本文件传递给ssh命令?

时间:2014-07-18 13:30:39

标签: bash shell unix ssh solaris

我在Unix中编写需要的脚本:

  1. 创建本地文本文件
  2. 通过ssh登录(例如user @ servername)
  3. 使用本地文本文件
  4. 结束脚本
  5. 不幸的是,我不能这样做,因为一旦脚本通过ssh登录,就无法看到文本文件。所以我试图将本地文本传递给ssh命令,因此它将看到文本文件。

    文本文件类似于此

    user@servername1
    user@servername2
    user@servername3
    ... etc
    

    我查看了SuperUser之前的回答,但他们的解决方案只是为我返回错误。

    ssh user@servername < text.txt
    #stty: : Invalid argument
    #sh: user@servername1: not found
    #sh[2]: user@servername2: not found
    #sh[3]: user@servername3: not found
    #...etc
    

3 个答案:

答案 0 :(得分:1)

尝试:

  1. 创建本地文本文件
  2. 将文件传输到远程主机:scp local_file user@servername:./remote_file
  3. 登录远程主机并执行操作:ssh user@servername cat -n remote_file

答案 1 :(得分:0)

如果您需要使用本地文件而不是远程复制,您可以尝试下一步:在另一个终端中调用ssh命令,然后您可以继续在本地工作并处理您的本地文件

xterm -e "bash -c \"ssh user@servername; exec bash\"" &

答案 2 :(得分:0)

作为@ glennjackman的两个连接来复制然后执行...

因为你可以pipe commands to ssh,这与你的例子非常相似,

echo "ls" | ssh localhost

您需要的只是中间的东西来解释文本文件。例如......

cat text.txt | sed 's/^/finger /' | ssh user@servername
#or
cat text.txt | ssh user@servername xargs finger

在您的示例中,ssh user@servernameuser@servername1非常相似。为了清楚起见,你不想在ssh命令中使用它们吗?:

while read user
do
ssh $user echo hi #ssh to each user/server in turn
done <text.txt