浏览 2960 次
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-05
最后修改:2009-07-21
简单的命令, 如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 很奇怪啊 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2009-06-05
普通的CD 命令是通过 cd path;ls-l才能列出当前目录, 运行完后还是回到HOME目录, 也没有办法,可能和ruby 块操作有关? 瞎猜
|
|
返回顶楼 | |
发表时间: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}.*" |
|
返回顶楼 | |
发表时间: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. |
|
返回顶楼 | |