如何使用bash脚本在远程计算机上运行命令?

时间:2016-06-29 12:24:44

标签: linux bash centos6

我正在尝试在远程计算机上运行以下命令,但没有任何内容正在执行,有人能用下面的脚本指出问题吗?

FYI settings.yml和fuscation_util.rb文件存在于testuser帐户

SCRIPT:

sshpass -p "PASSWORD" ssh -o StrictHostKeyChecking=no -T root@HOSTNAME <<EOF
    su - testuser
    NEWLINE=$'\n'
    read -s -p "Enter Presto Password:${NEWLINE}" VD_PASSWORD
    KEY=`cat settings.yml |grep '^key:'|sed 's/^key: //'`
    VALUE=`ruby fuscation_util.rb encrypt  "$KEY" "$VD_PASSWORD"`
    echo "$VALUE"
EOF

输出:

cat: settings.yml: No such file or directory
ruby: No such file or directory -- fuscation_util.rb (LoadError)

我只是在尝试将poutput分配给某个变量时遇到错误,使用下面的脚本我没有得到任何错误

SCRIPT:

sshpass -p "PASSWORD" ssh -o StrictHostKeyChecking=no -T root@HOSTNAME <<EOF
    su - testuser
    NEWLINE=$'\n'
    read -s -p "Enter Presto Password:${NEWLINE}" VD_PASSWORD
    cat settings.yml |grep '^key:'|sed 's/^key: //'
    ruby fuscation_util.rb encrypt  "testvalue" "testpassword"
EOF

输出:

WORKING FINE

3 个答案:

答案 0 :(得分:0)

我相信因为你是以root身份连接,所以你在连接时登陆的目录是root用户主目录。即使您更改了用户,您仍然会在同一个起始文件夹中(可能是/root)。

如果在执行命令之前明确cd到所需位置,您将可以访问所需的文件。

另一个选项(suggested by Shravan40)将指定您希望处理的文件的绝对路径。

还应该提到允许通过SSH进行root访问被视为安全风险。如果可能的话,我建议避免这样做。

答案 1 :(得分:0)

只要您的ssh以root身份连接到远程主机,它就会转到根目录。因此,尝试在里面更改目录或给出文件的绝对路径。

但是远程运行命令会带来安全风险。可能你可以在远程主机上放置一个脚本并传递参数,而不是在ssh中使用echo。

<强>更新

只需在ssh之前进行所有赋值,并在调用ruby时将键值用作表达式。

试试这个:

read -s -p "Enter Presto Password:${NEWLINE}" VD_PASSWORD
sshpass -p "PASSWORD" ssh -o StrictHostKeyChecking=no -T root@HOSTNAME <<EOF
su - testuser
cat settings.yml |grep '^key:'|sed 's/^key: //'
ruby fuscation_util.rb encrypt  `cat settings.yml|grep '^key:'|sed 's/^key: //'` $VD_PASSWORD
EOF

答案 2 :(得分:0)

除了使用完整路径和那些你需要用<<EOF替换<<'EOF'之外的东西,或者所有后退滴答都将在呼叫方处理,然后再发送到远程端。