如何使用awk通过Bash脚本从远程服务器

时间:2017-06-12 09:52:20

标签: linux bash awk remote-access remote-server

SCENARIO

文件users.yml包含多个用户名和密码。一些用户名和密码正在重复。例如......

xxxxx
username: abc
password: abcpwd
xxxxx
xxxxx
username: adam
password: adampwd
xxxxx
xxxxx
username: adam
password: adampwd
xxxxx

脚本文件script.sh正在尝试获取users.yml中用户名与条件匹配的所有行号。

username='adam'
filepath='/etc/myServer/users.yml'

#Gets the line number for the username
userNameLineNumbers=`awk -v line='^.*username: '$username'' '$0~line {print NR}' $filepath`

echo "username line number: "$userNameLineNumbers  #output: username line number: 6 10

如果我在users.yml所在的同一台机器上运行脚本,那么此脚本工作正常。但问题是......

问题

如果我将脚本保存在另一台服务器上并尝试远程获取文件中的行号,则该脚本不起作用。

我尝试了几种使用ssh获取行号的方法,但无法执行此操作。我不是bash脚本的专家,但仍然以不同的方式尝试以下命令,每次它给出一些奇怪的结果,而不是给我文件中的行号。

script="sudo awk -v line='^.*username: '$username'' '$0~line {print NR}' $filepath"
userNameLineNumbers=$(ssh -o "StrictHostKeyChecking no" -tty -i "$PEM_FILE" "user@remotehost.xyz" $script )

渴望输出

寻找一种解决方案,将行号作为数组从awk符合条件的远程服务器上的文件中获取。

1 个答案:

答案 0 :(得分:0)

我能想到的两个变化:

  1. 使用eval$script变量

  2. 中运行命令
  3. $中退出$0。否则它会扩展为$0的值,这会给出用于调用当前shell的命令(例如-bash

  4. script="sudo awk -v line='^.*username: '$username'' '\$0~line {print NR}' $filepath" userNameLineNumbers=$(ssh -o "StrictHostKeyChecking no" -tty -i "$PEM_FILE" "user@remotehost.xyz" eval $script )