论坛首页 编程语言技术论坛

ruby net ssh 应用中碰到一个奇怪问题

浏览 2960 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-06-05   最后修改:2009-07-21
发现ruby ssh后, 欣喜了一阵子, 但是使用后发现一个问题, 就是有些命令执行的时候和手工执行的时候效果不一样。

简单的命令, 如pwd, ls -l是没有问题的, 能够正确得到结果。
但是如果是运行shell脚本, 或者 cd  命令,就会失败, 很奇怪吧, 不知道诸位是如何解决的?

puts  Net::SSH::Version::CURRENT
  ssh=Net::SSH.start(board["ip"], board["root_username"], :password => board["root_password"],:config => true,:port=> 22)
puts DateTime.now
   result=ssh.exec! "export PATH=$PATH:/bin:/usr/bin:/usr/sbin:/sbin"
   puts resul
puts "start to echo lib path"
  result=ssh.exec! "echo $LD_LIBRARY_PATH"
  puts result

#result=ssh.exec!("/usr/app/bin/apdiag")
result=ssh.exec("/usr/app/bin/apdiag")
  puts result
   result=ssh.exec! "pwd"
  puts result


运行结果如下:

nil

start to echo lib path



#<Net::SSH::Connection::Channel:0x2926d6c>

/home/root

/usr/app/bin/apdiag: error while loading shared libraries: libmem.so: cannot open shared object file: No such file or directory

2009-06-05T14:24:34+08:00

total 336

drwxr-xr-x 6 7983   82   1024 Jun  4 08:33 build

-rw------- 1 root root 337920 Jun  4 08:29 build.tar

很奇怪啊

   发表时间:2009-06-05  
发现是PATH问题, 自动的远程登录shell环境变量 和手动登录 居然不一样。

1、设定服务端
修改/etc/ssh/sshd_config文件,增加:
引用
PermitUserEnvironment yes

2. 重启服务
service sshd restart

3.
add path into /etc/environment (或者 .ssh下)
chmod 600 environment
0 请登录后投票
   发表时间:2009-06-05  
普通的CD 命令是通过 cd path;ls-l才能列出当前目录, 运行完后还是回到HOME目录, 也没有办法,可能和ruby 块操作有关? 瞎猜
0 请登录后投票
   发表时间:2009-06-05  
你用ssh的话还是证书验证比较好,而且不要用root执行
我没有用过Net::SSH,我用过ant做过类似的东西
一般我会将每次要执行的所有任务集中到一个脚本内。

举个例子,备份oracle数据库上某个表,然后tar成一个压缩包再拷贝到本地。

我会在服务器上建立一个shell ~/rmt/bin/ora.dump.sh

#!/bin/sh
# script: ~/rmt/bin/ora.dump.sh
export APP_HOME=${HOME}/rmt
source ${HOME}/.bashrc.oracle.env
/usr/bin/ruby ${APP_HOME}/ruby/ora.dump.rb
exit



# script: ~/.bashrc.oracle.env
export ORACLE_HOME=/path/to/oracle_home
export ORACLE_SID=sms
export NLS_LANG=american_america.ZHS16GBK
export PATH=${ORACLE_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}




#!/usr/bin/env ruby
# script: ~/rmt/ruby/ora.dump.rb
tmp="#{ENV['APP_HOME']}/tmp"
exp="#{ENV['ORACLE_HOME']}/bin/exp"
conn="user/pass"
table="my_table"
cmd="#{exp} #{conn} tables=#{table} file=#{tmp}/#{table}.dmp log=#{tmp}/#{table}.log"
exec=`#{cmd}`
tar="tar czvf #{tmp}/#{table}.tgz #{tmp}/#{table}.*"
0 请登录后投票
   发表时间:2009-11-05  
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.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics