2013-11-25 148 views
2

我远程服务器上使用的shell中,运行一个简单的命令。命令执行外壳

我目前登录myHost01和我在myHost02

预期的结果运行此命令是this is a test myHost02。不过,我得到this is a test myHost01

这是我的命令

sshpass -p root ssh -q [email protected] "echo this is a test `hostname`" 

我不知道为什么它走的是服务器的主机名,我从运行命令!


这也是值得注意的是,当我运行这个

sshpass -p root ssh -q [email protected] "hostname" 

我得到myHost02(这是正确的输出)

+0

,只是:'SSH ..... @ ...“$ {command}”'。例如:'command = hostname; ssh ........ @ ....“$ {command}”'。注意,它可以很容易地得到TRICKY ...有时最好是1)创建一个本地'the_script'脚本,和2)'scp the_script user @ remotehost:/ tmp/safe_name' 3)'ssh user @ remotehost“/ tmp/safe_name“'。 safe_name是目标机器上唯一的名称。请注意:其他人可以替换safe_name(尤其是在/ tmp!内)。而在这些做法许多其他潜在的安全漏洞...... –

回答

3

在单引号传递命令,如下图所示。双引号导致shell就地执行命令替换hostname(本地),并通过该得到的线this is a test myHost01ssh

sshpass -p root ssh -q [email protected] 'echo this is a test `hostname`' 
如果有包含什么应该被远程完成本地$命令变量
+0

我只是跑'sshpass -p根SSH -q [email protected]“回响”这是一个测试hostname'''但我还是得到了第一台主机的名字! ! (我把主机名之间''我都不理他们的意见因为我想有太多的人,它会是不可读) – Masster

+0

@Matin,你应该只具有一个单引号的存在。你的命令有两个。看看我的示例命令 – iruvar

+0

好吧,但这个命令就是一个例子。真正的命令在用户将写入的配置文件中....用户可以编写任何命令。没有什么应该阻止他把这样的单引号.... 有没有办法消除这个限制?? !! – Masster