免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3001 | 回复: 7
打印 上一主题 下一主题

[系统管理] ssh远程执行命令竟然登录上去了——相关的3个小问题 [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-13 17:42 |只看该作者 |倒序浏览
本帖最后由 registcn 于 2014-01-14 12:42 编辑

事发直接原因是1)所述,2),3)是联想到的,现在,3个问题拆开说:
1)[who@xxx]ssh remotehost "$(host)"  首先提示host用错了(因为没有参数),然后竟登录上了remotehost并输出logged from xxx,为啥?感觉即便host没参数(用错了),也不改登录到remotehost上的?这是什么原理?
2)[who@xxx]ssh remotehost "\$(hostname)"  和ssh remotehost "$(hostname)" 两个结果分别是本机和远程机器的hostname,对于一个变量来说加不加\$可以解释本地和远程变量的区别,但对于$()子进程来说,\$也能转义为远程主机的子进程?
3)假设2)中的\$可以转义子进程,也可解释本地和远程变量的转义,那么怎么同时解释这两者呢?执行ssh remotehost "str=1234567;echo $(hostname;echo \$str;" 输出结果为
remotehost
bash: line 1: 1234567: command not found
按前面假设,hostname输出为远程机器的hostname没问题,str也应该是在远程定义的1234567呀(因为加\$了)?为啥报command not found?

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2014-01-13 20:49 |只看该作者
set -t 看看执行过程.....

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
3 [报告]
发表于 2014-01-14 09:03 |只看该作者
感觉至少应该报个本地的变量什么的(因为没加反斜线)

$()是Command Substitution,你的感觉不太准。
http://www.tldp.org/LDP/abs/html/commandsub.html

但是如果执行 [who@xxx]ssh remotehost "\$(host)" 就只报host用法错误,何解?

本来语法就错了,你在本机上执行一个host命令看看它报错不。

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
4 [报告]
发表于 2014-01-14 12:43 |只看该作者
可能原先问题混在一起没说清楚,麻烦您在解释下吧,问题拆解了。多谢回复 3# Shell_HAT


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2014-01-14 12:50 |只看该作者
回复 4# registcn


从第一个开始吧
感觉即便host没参数(用错了),也不改登录到remotehost上的?

你为什么认为它不该登录到remotehost上?

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
6 [报告]
发表于 2014-01-14 19:22 |只看该作者
ssh remotehost " " 以及ssh remotehost "\$(host)" 都不会登录要么不输出,要么报错,感觉去了反斜线顶多代表要将其当作本地命令去执行,不至于真的ssh上去,而且最终执行host出错也没退出远程机器

回复 3# Shell_HAT


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
7 [报告]
发表于 2014-01-15 08:35 |只看该作者
回复 6# registcn


光靠感觉不行,看看日志就知道它到底有没有登陆了。
/var/log/secure

论坛徽章:
1
巨蟹座
日期:2014-04-23 23:20:17
8 [报告]
发表于 2014-01-17 23:08 |只看该作者
从远程机器上看,确实是登录了,这个本来就确定的啊。现在问题是为啥会登录呢?
通过给本地机器set -x,找到了问题所在,如果不加\,就是认为本变量在ssh之前预先求值。而求值结果为空,相当于直接ssh了,因此当然登录。
如果加\,意味着先ssh再求值,因此相当于“”里面不空,虽然是个错误语句...因此未登录。还是很感谢你的启发哈,看日志!回复 7# Shell_HAT


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP