回答:
これを実現するには、2つの方法があります。
cd /var/www/websites
の末尾に追加します.bashrc
。homedirの代わりに/ etc / puppet / environments / dkaarsemakerに常駐したいので、私はこれをpuppetmasterで使用します:-).profile
代わりに.bashrc
にしたいかもしれませんが、それはユースケースによって異なります。 .profile
対話型ログイン(シェルなど)に対してのみ.bashrc
実行されますが、非対話型ログイン(scp、rsyncなど)に対しても実行されます。また、.profileは、bashではないシェル(zshなど)によって呼び出される可能性が高くなります。
SSHログインにキーを使用する場合、リモートサーバーのcommand=
キーの前に追加することでパスを変更できます。例:~/.ssh/authorized_keys
command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key
同じユーザーに対して複数のキーを生成して使用しても構いません。サーバー上の1つのキーにコマンドが含まれる場合があります。もう1つのキーには含まれない場合があります。これにより、ログイン時に予期される動作を選択できます。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_*
トリックのための+1