当前位置: 首页>>技术教程>>正文


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

, , , ,

问题描述

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

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

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

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

我正在运行Ubuntu 12.04。


最初的问题是:

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

最佳回答

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

 ssh user@host bash --login -i 

~/.profile(或〜。/bash_profile)的”role”和ssh的.bashrc还有其他文件(有关详细信息,请参阅man ssh):

~/.ssh/environment

Contains additional definitions for environment variables; see ENVIRONMENT, above.

~/.ssh/rc

Commands in this file are executed by ssh when the user logs in, just before the user’s shell (or command) is started. See the sshd(8) manual page for more information.

次佳回答

.profile仅针对登录Shell加载,而ssh会话不加载(默认)。如果希望所有交互式Shell在启动时都运行某些命令,请将其放在.bashrc(或.zshrc或您的Shell使用的任何东西)中。

另外,如果您只想登录本地计算机上的另一个帐户,则ssh可能会显得过高。您可能要使用su或其他名称。

第三种回答

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

sshd咨询~/.ssh/environment(检查sshd_config(5)的权限)和~/.ssh/sshrc~/.ssh/rc。这样就可以设置ENV=~/.profileBASH_ENV=~/.profileSSH_LOGIN=Y

~/.profile中,我具有以下布局(使用bash时将ENV替换为BASH_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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10888.html,未经允许,请勿转载。