Answers:
有两种方法可以实现此目的:
cd /var/www/websites
到您的末尾.bashrc
。我在我们的puppetmasters上使用这个,因为我一直想在/ etc / puppet / environments / dkaarsemaker那里,而不是我的homedir :-).profile
而不是中.bashrc
,但这取决于您的用例。 .profile
仅对交互式登录(例如shell).bashrc
执行,但也对非交互式登录(例如scp,rsync等)执行。同样,.profile更有可能被非bash的shell(例如zsh)调用。
如果您使用密钥进行SSH登录,则可以通过command=
在远程服务器~/.ssh/authorized_keys
上的密钥之前加上前缀来更改路径。例:
command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key
可以为同一用户生成和使用多个密钥。服务器上的一个键可能包含命令,而另一个则可能不包含命令-通过这种方式,您可以在登录时选择预期的行为。您可以简单地用local 来包装它~/.ssh/config
:
Host websites-my-host
HostName <realhostname>
IdentityFile ~/.ssh/<key1> #on the server key with "command"
User webmaster
Host my-host
HostName <realhostname>
IdentityFile ~/.ssh/<key2> #on the server key without command
User webmaster
这将发生:
local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _
要么:
local$ ssh my-host
webmaster@realhostname:~$ _
$SSH_ORIGINAL_COMMAND
而不是/bin/bash -l
使这些工具正常工作(在我的情况下为hg)。或者,$SHELL
如果您不想对bash进行硬编码。不确定如何使工具和人工登录都能正常工作。
默认情况下,Openssh sshd从客户端接受以下环境变量:
AcceptEnv LANG LC_*
您可以使用它将值从客户端的本地环境发送到服务器,如下所示:
LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server
您可以将SendEnv指令放在〜/ .ssh / config中,这样就不必在命令行中包含它。
如果将以下内容放在〜/ .profile中(仅影响交互式登录,请使用.profile,影响所有登录,请使用.bashrc):
if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
cd "$LC_CDPATH";
fi
然后,如果您登录并且目录是目录,它将在您登录时自动将目录更改为环境变量中指定的目录。
LC_*
技巧