それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh の .ssh/config 場所を変える。

ssh の鍵の場所を変える。ために.ssh の場所を変えたい。

ログインを許可していないユーザー (www-data, backup,gitlab-wwwなど)のssh の設定場所にいつも苦労する。

~/.ssh を変えたいと思った。→できない

ssh のデフォルトディレクトリの.ssh は、設定で変えられないんですね。

~.ssh の場所はデフォルで固定のようですね。将来のアップデートで変わるんだろうかと思ったけど、今のところ出来ないってことはセキュリティ懸念とかで固定されてるということでしょうね。

man ssh で調べてみる。

man ssh_config 見た感じでは、変えられないんですよ。

他の方法を探してみる。

そこで、他の方法をあれこれ考えてみる。

  • .ssh/id_rsa/.ssh/known_hosts なら変えられる。
  • .ssh/config は include が使える。
  • git 関連なら GIT_SSH_COMMAND を使え

代替方法は、上記が候補に上がる。

IdentityFile / UserKnownHostsFile などは変えられる。

.ssh/config の場所を変えることは出来ないが、

グローバル設定 /etc/ssh/config を使えば、デフォルトのファイルの場所を変えられる。

たとえば、次のファイルを変えられれる。

  • UserKnownHostsFile -- ~/.ssh/known_hosts
  • IdentityFile -- ~/.ssh/id_rsa

グローバル設定に書いておけば、個人用ファイルを気にせずにかくことができる。

設定例 /etc/ssh/ssh_config

Match user www-data 
  UserKnownHostsFile  /etc/confings/www-data/.config/.ssh/known_hosts
  IdentityFile   /etc/confings/www-data/.config/.ssh/id_rsa

~/.ssh/config は変えられない。→ include で代用

~/.ssh/config を変えられないが、 include は使える

それですね。そうですね。include も一つの方法でした。

設定例。

touch /etc/confings/www-data/.config/.ssh/config
echo  Include  /etc/confings/www-data/.config/.ssh/config  >  ~./ssh/config

Includeを使うことで、ユーザの空間ではなく、グローバルな空間に置く事ができる。

変えたいときって、どうせGitでしょ?

ssh の設定を変えたいときって、git cloneや git を使った CI/CDとかでしょ? GIT_SSH_COMMAND を使えばいいと思うよ。

export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example" 
git clone example

ci の yaml環境変数を書いておけば、ほとんど場合のCI/CDでの自動テストと自動ビルドのようなgit の鍵トラブルは軽減できますよね。

参考資料