我试图在远程机器上运行以下命令,但是没有执行任何命令,有人能指出下面的脚本的问题吗?
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
发布于 2016-06-29 04:27:58
我相信,因为您是以根目录形式连接,所以您在连接时所登录的目录是根用户主目录。即使您更改了用户,您仍将处于相同的启动文件夹中(可能是/root
)。
如果在执行命令之前显式地将cd
放入所需的位置,则可以访问所需的文件。
另一个选项(suggested by Shravan40)是指定要处理的文件的绝对路径。
还应该提到,允许通过SSH进行根访问被认为是一种安全风险。如果可能的话,我建议避免这样做。
发布于 2016-06-29 04:33:18
一旦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
发布于 2016-06-30 05:01:09
除了使用完整的路径和那些您需要用<<'EOF'
替换<<'EOF'
的东西之外,在将所有回拨代码发送到远程端之前,它们都将在调用端进行处理。
https://stackoverflow.com/questions/38099465
复制相似问题