8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

共有のSSHユーザアカウントでも自分だけの.bashrcを使う裏ワザ

Last updated at Posted at 2017-10-26

なんらかしらの事情でサーバに個人ユーザを作れず、複数人でひとつのSSHを共有して使う場面があります。個人ユーザを作ることが許される環境であれば、自分のアカウントに.bashrcを置いて自分用のカスタマイズをできます。しかし、共有アカウントの場合は他の人もログインすることを考えて.bashrcを書き換えられなかったりします。

こうしたケースでも自分用の.bashrcを使える方法があります。

ログインした後にsourceするオーソドックスな方法

まず、個人的な.bashrcは他の人の迷惑にならなそうなところに置きます。

たとえば、~/company03/suin/.bashrcといった自分用のフォルダに置くとします。

ログインした後にsourceするオーソドックスな方法では、最低でも次のような2ステップになります。

# 目的のサーバにログインする
$ ssh company03@example.com

# ログイン後に個人的な.bashrcを読み込む
[company03@websvr ~]$ source ~/company03/suin/.bashrc

この方法だとSSHするたびにsourceコマンドを実行しなければならず、頻繁にログインするサーバではとても面倒です。

~/.ssh/authorized_keysを細工する方法

~/.ssh/authorized_keysを細工すると、オーソドックスな方法ではどうしても必要になってしまう2ステップ目を省くことができます。

~/.ssh/authorized_keysはログインを許可する公開鍵を列挙するファイルですが、カギ情報の他にもオプションを書くことができます。そのオプションのひとつにcommandオプションがあります。このオプションは特定の鍵でログインしたとき、自動的にそのコマンドを実行し、その処理が終わったらSSH接続を切断する設定です。

たとえば、次のようにcommandオプションにlsをセットしておくと、SSHでログインしたら自動的にlsを実行し切断されます。

~/.ssh/authorized_keys
...他の人の公開鍵...
command="ls" ssh-rsa AAAA…(公開鍵中略)…Kbm1 suin@suin.local

これを応用して、commandbash --rcfile ~/company03/suin/.bashrcをセットしておきます。bashコマンドは自分でexitしない限り処理が続いていくので勝手に切断されることはありません。自分のbashrcを読み込ませるために、bashコマンドには--rcfileオプションを渡します。当然ですが、SSH公開鍵は自分個人のものを~/.ssh/authorized_keysに書くようにしてください。

~/.ssh/authorized_keys
...他の人の公開鍵...
command="bash --rcfile ~/company03/suin/.bashrc" ssh-rsa AAAA…(公開鍵中略)…Kbm1 suin@suin.local

このようにしておくと、共有のSSHアカウントでもsshコマンド一発で、自分がログインしたときだけ自分の個人的な.bashrcを自動的に読み込んでくれるようになります。

なお、commandオプションを設定するときは、設定に失敗してSSHできなくなることも想定して、別窓で予備のSSH接続を維持しておくことをオススメします。

8
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?