繁体   English   中英

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

[英]How to run commands on remote machine using bash script?

我正在尝试在远程计算机上运行以下命令,但未执行任何操作,有人可以指出以下脚本的问题吗?

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

脚本:

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分配给某个变量时,我才遇到错误,使用以下脚本我没有得到任何错误

脚本:

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

我相信,因为您是以root用户身份连接的,所以连接时进入的目录是root用户主目录。 即使更改用户,您仍将位于同一起始文件夹(可能是/root )中。

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

另一个选项( 由Shravan40建议 )是指定要处理的文件的绝对路径。


还应该提到的是,允许通过SSH进行根访问被视为安全风险。 我建议尽可能避免这种情况。

一旦ssh以root用户身份连接到远程主机,它将进入根目录。 因此,请尝试在其中的更改目录或提供文件的绝对路径。

虽然远程运行命令具有安全风险。 可能您可以将脚本放在远程主机上并传递参数,而不是在ssh中使用回显。

更新:

只需在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

除了使用完整路径之外,您还需要用<<'EOF'替换<<EOF或所有后向滴答声,否则它们将被发送到远程端之前在调用方进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM