やりたいこと・問題点
仕事用の.ssh/configで *
を多用したことで、プライベートなホストを除外する記述が大変でやりたくない。
sshが参照する.ssh/configを用途別に分けられたらよさそう。
具体的にはHOME変数見て.ssh/configの読むパスが変わらないかなーみたいな。
結果、HOME変数で.ssh/configのパスを変えることはできなかったものの、満足する動作に至ったためここに公開。
(Mac+iTerm環境)
実現策: HOME
変数の書き換え+configの Include
単純に HOME
変数を書き換えてもsshコマンド使用時に参照するconfigまでのパスはユーザホームディレクトリ直下の.ssh/config固定。そういうもののようです。
ところが、.ssh/configで Include
文では ~
が HOME
変数で展開される。
以下のようなディレクトリ構成/.ssh/config
の場合、HOME
変数の内容をもとにssh実行時に参照するconfigを切り替えることが可能。
/Users/taro/
├──.ssh
│ ├──config
│ └──conf.d
│ └──common.conf (例えばプライベートときだけ参照したいconfig)
└──work
└──.ssh
└──conf.d
└──common.conf (例えば仕事のときだけ参照したいconfig)
Include ~/.ssh/conf.d/common.conf
上記構成とすると、 ~
を展開したときに読み込まれるファイルが変わるため、sshの動作を切り替えることができるようになる。
-
HOME
変数を書き換えていない場合 (デフォルト時)- ssh実行時に
/Users/taro/.ssh/config
から
/Users/taro/.ssh/conf.d/common.conf (プライベート用)
が読まれる
- ssh実行時に
-
HOME
変数を書き換えた場合 (export HOME=/Users/$USER/work
)- ssh実行時に
/Users/taro/.ssh/config
から
/Users/taro/work/.ssh/conf.d/common.conf (仕事用)
が読まれる
- ssh実行時に
※HOME変数を書き換えたときにどっかでエラー出るんじゃないかと不安 (そもそもsshが期待どおり動作していないわけで、似たようなことがありそう)
iTermのプロファイルを使ったおまけ
iTermの設定で以下をそれぞれ用途別に設定するとプロファイルの切り替えで
- Profile→General→Command→Login ShellをCommandに変更して以下を入れる
/usr/bin/env HOME=/Users/taro/work /bin/bash --login
- Profile→General→Command→Working Directoryに以下を入れる
/Users/taro/work
試行錯誤してたやつ
やってみて単純にダメだった HOME
変数の書き換え
だめだった
やりたいことはできてるけど不都合も多い sshコマンドの alias
ターミナルアプリを判別して以下を叩くようにしておいた。動くといえば、動く。あんまり困らない人は、困らない。
alias ssh='ssh -F ~/.ssh/config2'
最後に
探したとき見つけられなかった内容をまとめてみましたが、もっとよくまとまっているページがあれば教えてください。
また、この方法の方が楽という話があれば教えてください。