web-dev-qa-db-ja.com

サーバーにSSH接続するときにデフォルトのディレクトリを変更する

UbuntuサーバーにSSH接続した後、デフォルトディレクトリを変更する方法があるかどうか疑問に思っていました。

サーバーにログインしているときの99%は、特定のディレクトリ内のファイルにアクセスすることです。

/var/www/websites

ログイン時にこのディレクトリに直接移動できるようにする編集可能な設定ファイルはありますか?

48
Bob Flemming

これを実現するには2つの方法があります。

  • サーバーのホームディレクトリを/ var/www/websitesに変更します(これは本当に良い考えではありません)
  • 追加 cd /var/www/websitesの最後まで.bashrc。私はいつも自分のホームディレクトリの代わりに/ etc/puppet/environments/dkaarsemakerにいたいので、これをパペットマスターで使用します:-)
67

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:~$ _
16
gertas

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

次に、ディレクトリが指定されていれば、ログイン時に、環境変数で指定されたディレクトリに自動的に変更します。

7
Victor Jerlin