RVM无法通过SSH工作

lei*_*ifg 22 ruby ssh rvm

RVM无法通过SSH工作.

在命令行:

leifg@host:~$ which ruby
/usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby
Run Code Online (Sandbox Code Playgroud)

通过SSH连接:

local:~$ ssh leifg@server 'which ruby'
/usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)

我正在使用Ubuntu 11.04.

如何让SSH使用与系统上相同的Ruby?

我已经验证了一些先决条件:

  • Ruby已经安装使用了apt-get install ruby.这有什么不同吗?
  • sshd_config 有"PermitUserEnvironment yes"选项,我重新启动了守护进程.

服务器上的.bashrc包含这些行,但是当我删除它们时会看到相同的行为:

if [ -s "$HOME/.rvm/scripts/rvm" ] ; then
  . "$HOME/.rvm/scripts/rvm"
elif [ -s "/usr/local/rvm/scripts/rvm" ] ; then
  . "/usr/local/rvm/scripts/rvm"
fi
Run Code Online (Sandbox Code Playgroud)

小智 50

实际上,你的〜/ .bashrc将被执行.问题通常是人们加上了

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
Run Code Online (Sandbox Code Playgroud)

...文件底部的代码段.但是,ubuntu系统上的默认.bashrc包括以下顶部附近

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)

该调用将停止执行脚本的其余部分,因此不会设置正确的路径.因此,您可以将rvm调用放在文件的顶部或删除返回调用.

  • 这在Ubuntu上为我解决了.知道在我的情况下,"如果不以交互方式运行,不做任何事情"的默认.bashrc代码可能会有所帮助:`case $ - in*i*);;*)返回;; esac`. (3认同)

Mic*_*ohl 19

ssh手册页:

如果指定了command,则在远程主机上执行它而不是登录shell.

这应该意味着您.bashrc不会获得来源,因此RVM不会被设置.

这最终成功了:

ssh <host> bash --login -c <command>
Run Code Online (Sandbox Code Playgroud)

通过SSH启动bash作为登录shell,然后通过SSH -c选项启动RVM安装Ruby .


小智 16

实际上还有另一种更安全,更轻便的选择.

在某处将" PermitUserEnvironment yes " 添加到/ etc /(open)ssh中的sshd_config

现在,您可以在/home/user/.ssh/environment中指定用户环境.那么你把它放在那里?

就像这样:

user# env | grep rvm > ~/.ssh/environment

所以看起来如下:

user@app3:~$ cat ~/.ssh/environment 
rvm_bin_path=/usr/local/rvm/bin
GEM_HOME=/usr/local/rvm/gems/ree-1.8.7-2012.02
IRBRC=/usr/local/rvm/rubies/ree-1.8.7-2012.02/.irbrc
MY_RUBY_HOME=/usr/local/rvm/rubies/ree-1.8.7-2012.02
rvm_path=/usr/local/rvm
rvm_prefix=/usr/local
PATH=/usr/local/rvm/gems/ree-1.8.7-2012.02/bin:/usr/local/rvm/gems/ree-1.8.7-2012.02@global/bin:/usr/local/rvm/rubies/ree-1.8.7-2012.02/bin:/usr/local/rvm/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
rvm_version=1.14.5 (stable)
GEM_PATH=/usr/local/rvm/gems/ree-1.8.7-2012.02:/usr/local/rvm/gems/ree-1.8.7-2012.02@global

注意:这也适用于用户安装RVM(不仅适用于系统范围)

现在,您可以在ssh非交互式会话中使用ruby:

ssh user@app3 'ruby --version'
ruby 1.8.7 (2012-02-08 MBARI 8/0x6770 on patchlevel 358) [x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2012.02

瞧!