环境:ruby 1.8.7、net/ssh 2.0.22、openssh 5.4、archlinux 2.6.32
问题1:PATH的问题,导致我们无法执行一些命令
现象:
我们net/ssh connection openssh后 exec!('echo $PATH') 返回的是 /usr/bin:/bin:/usr/sbin:/sbin
原因:
net/ssh 是 "user@notty" ,而 xshell这些 是 "user@pts/x"
这点我们可以通过 'ps aux|grep sshd' 来实时查看
查看后发现 xshell 认证后是 sshd: root@pts/0 ,而net/ssh 认证后是 sshd: [accepted]
[2010.6.4 19:00更新] 我把net/ssh用到rails中的时候,rails启动后是 sshd: root@notty,这个还真没想到能看到
引用一段说明
//原文参见 http://www.iteye.com/topic/402750
Ruby ssh only provide the "SSH" function, not term login.
If you check, you will see that the connection from ruby ssh is "user@notty", not like ssh command ("user@pts/x").
You have to do more to make an environment like manual login.
解决方法:
[root@vkill ~]# vi /etc/ssh/sshd_config
//添加这行
PermitUserEnvironment yes
[root@vkill ~]# vi ~/.ssh/environment
//添加类似这行,文件内容格式参见 /etc/environment
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/ruby-enterprise-1.8.7-2010.01/bin:/usr/local/bin:/usr/local/sbin
[root@vkill ~]# /etc/rc.d/sshd restart
结果:
现在再去 net/ssh 后看 $PATH 就是~/.ssh/environment中设置的了
问题2:工作目录的问题
现象:
shell下先后执行 'cd /var' 和 'pwd' 命令,当前工作目录就是 /var 了,而 net/ssh 则还是 ~
解决方法:
两个命令一起执行,即net/ssh connection openssh后 exec!('cd /var ;pwd') 则显示 /var
Last modified by vkill on2010/06/04 19:01
问题1:PATH的问题,导致我们无法执行一些命令
现象:
我们net/ssh connection openssh后 exec!('echo $PATH') 返回的是 /usr/bin:/bin:/usr/sbin:/sbin
原因:
net/ssh 是 "user@notty" ,而 xshell这些 是 "user@pts/x"
这点我们可以通过 'ps aux|grep sshd' 来实时查看
查看后发现 xshell 认证后是 sshd: root@pts/0 ,而net/ssh 认证后是 sshd: [accepted]
[2010.6.4 19:00更新] 我把net/ssh用到rails中的时候,rails启动后是 sshd: root@notty,这个还真没想到能看到
引用一段说明
Quotation
//原文参见 http://www.iteye.com/topic/402750
Ruby ssh only provide the "SSH" function, not term login.
If you check, you will see that the connection from ruby ssh is "user@notty", not like ssh command ("user@pts/x").
You have to do more to make an environment like manual login.
解决方法:
[root@vkill ~]# vi /etc/ssh/sshd_config
//添加这行
PermitUserEnvironment yes
[root@vkill ~]# vi ~/.ssh/environment
//添加类似这行,文件内容格式参见 /etc/environment
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/ruby-enterprise-1.8.7-2010.01/bin:/usr/local/bin:/usr/local/sbin
[root@vkill ~]# /etc/rc.d/sshd restart
结果:
现在再去 net/ssh 后看 $PATH 就是~/.ssh/environment中设置的了
问题2:工作目录的问题
现象:
shell下先后执行 'cd /var' 和 'pwd' 命令,当前工作目录就是 /var 了,而 net/ssh 则还是 ~
解决方法:
两个命令一起执行,即net/ssh connection openssh后 exec!('cd /var ;pwd') 则显示 /var
Last modified by vkill on2010/06/04 19:01
网友评论(1):
CharlesCui
2010/06/12 11:05
这个问题我整好今天也碰到了,也是采用cd命令和其它命令写在一起,然后让Net::SSH的exec!函数一起调用.但还有一个问题没有解决就是:当Net::SSH访问rpc.rstatd这个命令的时候Ruby会被阻塞住,远程主机也没有执行rpc.rstatd命令,sess.exec!("rpc.rstatd")我还没有搞明白什么原因导致,估计是rpc.rstatd命令自身问题.
vkill replied on 2010/06/13 23:17
你好,我用 archlinux 的,还没用过 rpc.rstatd ,你用本地执行下 rpc.rstatd 看看是不是要需要输入啥,我试 'passwd user' 的时候也一直组塞住,后来发现输入不是在 stdout 中,而是在 stderr 中,具体啥情况看看这篇 http://blog.vkill.net/read.php/157.htm