解決策 1:
これを実現するには 2 つの方法があります:
- サーバーのホームディレクトリを /var/www/websites に変更します (これはあまり良い考えではありません)
cd /var/www/websites
を追加.bashrc
の最後まで .ホームディレクトリではなく /etc/puppet/environments/dkaarsemaker に常駐したいので、パペットマスターでこれを使用しています :-)
解決策 2:
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
[email protected]:/var/www/websites$ _
または:
local$ ssh my-host
[email protected]:~$ _
解決策 3:
Openssh sshd は、デフォルトでクライアントから次の環境変数を受け入れます:
AcceptEnv LANG LC_*
これを使用して、クライアントのローカル環境からサーバーに次のように値を送信できます:
LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH [email protected]
SendEnv ディレクティブを ~/.ssh/config に配置できるため、コマンド ラインに含める必要はありません。
~/.profile に以下を配置すると (対話型ログインのみに影響を与えるには .profile を使用し、すべてのログインに影響を与えるには .bashrc を使用します):
if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
cd "$LC_CDPATH";
fi
次に、環境変数が指定されていて、それがディレクトリである場合、ログイン時に環境変数で指定されたディレクトリに自動的に変更します。
解決策 4:
OpenSSH 7.6 以降、新しい RemoteCommand オプションを使用してそれを実現できます。
あなたの ~/.ssh/config
で :
Host websites-my-host
HostName <realhostname>
IdentityFile ~/.ssh/keyfile
User webmaster
RequestTTY force # check if this is necessary
RemoteCommand cd /var/www/websites && bash -l