使用SSH(Ubuntu)时未加载〜/ .profile


22

编辑以反映我真正想解决的问题:

我需要设置红宝石环境,以便可以通过Capistrano进行部署。

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

我把它们放在〜deploy / .profile中,但是当我输入ssh时,它们并没有运行。有想法吗?

我正在运行Ubuntu 12.04。


最初的问题是:

当我在本地主机上登录另一个帐户时,它不会加载我的.profile。如何强制ssh加载它?我正在运行Ubuntu 12.04。

Answers:


15

您可以明确指定要启动交互式登录外壳程序:

 ssh user@host bash --login -i 

“角色”~/.profile(或〜/ .bash_profile中),并.bashrc为SSH有一些其他的文件,(见man ssh详细信息):

〜/ .ssh /环境

包含环境变量的其他定义;请参阅上面的环境。

〜/ .ssh / rc

当用户登录时,就在用户的shell(或命令)启动之前,此文件中的命令由ssh执行。有关更多信息,请参见sshd(8)手册页。


“您可能”通常是不正确的,因为ssh正在由其他工具运行(连续交付),并且无法轻松更改命令。
Jan Hudec

6

.profile仅为登录shell(默认情况下不为ssh会话)加载。如果您希望某些东西在启动时为所有交互式shell运行,请放入它.bashrc(或.zshrc您的shell使用的任何东西)。

另外,如果您只想登录本地计算机上的另一个帐户,则ssh可能会过大。您可能要使用su或代替。


3
似乎.bashrc也未加载。
kenorb 2014年

这是不正确的。这一个登录shell。在手册页中:“如果指定了命令,那么它将在远程主机而不是登录Shell上执行。”
mkj 2015年


当给ssh一个要运行的命令时,默认情况下它分配tty,那么shell也不是“交互式的”。
Jan Hudec

4

使用bash应该会导致阅读~/.bashrc。以下内容可能有助于ksh和sh(在sh模式下为bash),或者~/.bashrc在登录期间未执行your 时。

sshd进行查询~/.ssh/environment(检查sshd_config(5)的权限)和~/.ssh/sshrc~/.ssh/rc。这使得可能设置ENV=~/.profileBASH_ENV=~/.profileSSH_LOGIN=Y

~/.profile我有以下布局(使用bash时替换ENVBASH_ENV):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

Bash ~/.profile仅在它是登录外壳程序并且~/.bash.bashrc只有在具有终端的情况下才读取,默认情况下,当使用ssh调用命令时,都不为真。但是,不幸的是,还有其他几个选项可以在服务器上设置环境,所有选项都取决于系统设置:

  • ~/.zshenv在这种情况下,Zsh 甚至可以读取。虽然没有相应的bash配置文件。
  • 如果PermitUserEnvironment启用该选项/etc/sshd_config,则ssh将读取~/.ssh/environment。不幸的是,该选项默认为关闭。
  • 如果pam_env.so使用user_readenv=1in 调用/etc/pam.d/sshd,它将读取~/.pam_environment。虽然它不是模块的默认值,但至少在Ubuntu中以这种方式调用它
  • 如果所有其他方法均失败,则可以command=在授权密钥文件中放置一个指令,以调用包装器脚本来设置环境并$SSH_ORIGINAL_COMMAND在最后执行(我的命令是用于shell的,因此eval在此处适用,但我不确定) 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.