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


42

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

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

/var/www/websites

ログイン時にこのディレクトリに直接配置されるように編集できる構成ファイルはありますか?

回答:


62

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

  • サーバー上のホームディレクトリを/ var / www / websitesに変更します(これは本当に良い考えではありません)
  • cd /var/www/websitesの末尾に追加します.bashrc。homedirの代わりに/ etc / puppet / environments / dkaarsemakerに常駐したいので、私はこれをpuppetmasterで使用します:-)

ありがとう。/ etcディレクトリにあるbash.bashrcファイルを編集しました。御treat走:)
ボブフレミング

7
それはすべてのユーザーに影響するので、私はそうしません。/home/yourlogin/.bashrcを編集する方が良い
Dennis Kaarsemaker

6
これをの.profile代わりに.bashrcにしたいかもしれませんが、それはユースケースによって異なります。 .profile対話型ログイン(シェルなど)に対してのみ.bashrc実行されますが、非対話型ログイン(scp、rsyncなど)に対しても実行されます。また、.profileは、bashではないシェル(zshなど)によって呼び出される可能性が高くなります。
phord

.bashrcは、「exec bash」を実行してbashを更新すると実行されます。特別なユースケース(ここではsshログイン)のためにbashrcを変更することは役に立ちません。
user3123159

14

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

3
私はこの質問を受け入れられたものよりも好みます。これにより、複数のユーザーがサーバーで同じユーザーを使用し、個人的にログインしたときの動作をカスタマイズできます。他のユーザーよりもはるかに柔軟で正確です。
テストユーザー

1
コマンドを〜/ .ssh / authorized_keysに追加すると、rsync、scpなどのsshに基づく他のツールに影響するため、ここでは本当に注意する必要があります。これらのコマンドは単にハングします
-warunapww

1
ツールを動作させる$SSH_ORIGINAL_COMMAND代わりに使用できます/bin/bash -l(私の場合はhg)。または$SHELL、bashにハードコードしたくない場合。ツールと人間のログインの両方を機能させる方法がわかりません。
mpen

注意事項:PasswordAuthenticationを無効にして(askubuntu.com/questions/346857/…を参照)、誤ってコマンド文字列を誤って入力すると、システムからロックアウトされる可能性があります。
karan.dodia

6

デフォルトでは、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

その後、ログイン時に、指定されていてディレクトリである場合、環境変数で指定されたディレクトリに自動的にディレクトリを変更します。


1
LC_*トリックのための+1
オリエント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.