それが重要な場合には
- OS: Ubuntu 10.04
- SSH: OpenSSH_5.3p1 Debian-3ubuntu5
一つの SSH 設定ファイルに別の設定ファイルを含めたいと思います。使用例としては、デフォルトの .ssh/config
ファイルに好きなものを定義して、別のファイル (~/.ssh/foo.config
など) にいくつかの余分なものを前置しておくことです。しかし、最初のファイルのすべてを複製する必要がないように、2つ目のファイルには最初のファイルを組み込みたいと思っています。これは可能でしょうか?ありがとうございます
166 Joe Casadonte 2011-02-18
7.3p1以降では、Include
キーワードがあり、設定ファイルを含めることができます
Include
指定された設定ファイルを含む。複数のパス名を指定することができ、各パス名には glob(3) ワイルドカードや、ユーザ設定では、ユーザのホームディレクトリへのシェルのような “~” 参照を含めることができます。 絶対パスのないファイルは、ユーザ設定ファイルに含まれている場合は
~/.ssh
に、システム設定ファイルに含まれている場合は/etc/ssh
にあると仮定されます。Include
ディレクティブはMatch
またはHost
ブロックの中に現れ、条件付きで含めることができます。ssh_config(5).
インクルード句をファイルの一番上に置くべきです
例えば、~/.ssh/config
のようにすることができます
Include config.d/home
Host github.com
HostName github.com
User git
と~/.ssh/config.d/home
の中にある
Host laptop
HostName laptop.lan
コメントから、config.d
ディレクトリ内のすべてのファイルを含めるために、以下のようにしてください
Include config.d/*
195 Osaka 2016-11-05
いや、私の知る限りでは、これは不可能だ
ここでは、対応するオープンな機能要求/バグチケットへのリンクを示しています
28 rems 2011-02-18
sshクライアントを起動したい場合は、bashでこのようにするといいでしょう
#files are .ssh/config and ~/.ssh/foo.config
alias ssh='ssh -F <(cat .ssh/config ~/.ssh/foo.config)'
とすると、通常は ssh を使用して、両方のファイルをこの順番で読み込ませることができます
サーバデーモン sshd
のために、-F
の代わりに -f
を使用して、直接デーモンを起動する場所を書き留めておくことで、同じことができます
man ページによると、システム全体の設定を /etc/ssh/ssh_config
に、ユーザの設定を ~/.ssh/config
に置くというのが第二の可能性です
Update どうやらいくつかのbashのバージョンとデバイスの作成方法に問題があるようです。(http://bugs.alpinelinux.org/issues/1465 を参照)
これは回避策です(私の中では不細工ですが)
mkfifo /tmp/ssh_fifo
cat ~/.ssh/config ~/.ssh/foo.config >/tmp/ssh_fifo &
ssh -F /tmp/ssh_fifo myserver
rm /tmp/ssh_fifo
のように、必要に応じて関数を作成することができます (またはスクリプト)
ssh() {
tmp_fifo=$(mktemp -u --suffix=_ssh_fifo)
mkfifo "$tmp_fifo"
cat ~/.ssh/config ~/.ssh/foo.config >"$tmp_fifo" 2>/dev/null &
/usr/bin/ssh -F "$tmp_fifo" "$@"
rm "$tmp_fifo"
}
25 estani 2012-04-19
ssh 7.3(2016年8月1日リリース)から、Include
ディレクティブが利用可能になりました
インクルードします。指定した構成ファイルをインクルードします。複数のパス名を指定することができ、各パス名には glob ワイルドカードや、ユーザのホームディレクトリへのシェルのような “~” 参照を含めることができます。絶対パスのないファイルは
~/.ssh
にあるものとします。Include
ディレクティブがMatch
またはHost
ブロックの中に現れ、条件付きで含めることができます
(ここにパッチを含む解決済みのバグレポートへのリンクがあります。https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24)
17 Christian Hudon 2016-07-11
他の「ブス」と同様に、ここでは私のワンライナーを紹介します
alias ssh="cat ~/.ssh/config.d/* > ~/.ssh/config; ssh"
14 Aleksandr Makov 2013-02-21
まあ、これをするためにちょっとしたチートをしています。私のbash .profile的なファイルの中に、ログイン時にホームディレクトリの様々な部分を置き換えるブロックがあるので、毎回新しいものを生成しています。例
rm ~/.ssh/config
cat ~/conf/myservers.sshconfig >> ~/.ssh/config
[ -f ~/conf/workservers.sshconfig ] && cat ~/conf/workservers.sshconfig >> ~/.ssh/config
(or something like this:)
for i in `ls ~/conf/sshconfigs` ; do
cat $i >> ~/.ssh/config
done
chmod 600 ~/.ssh/config
これにより、私がホスト A または B にいるときだけ ssh 設定ファイルに設定ブロックを追加するようなこともできますが、自宅のシステムではできません
たくさんログインしていると、これが過度の速度低下を引き起こす可能性があることに不満を持つ人がいるでしょうが、実際には気がついたことはありませんでした。これをスクリプトに入れて、cron経由で実行することもできると思います
6 Dave 2012-11-20
個人的には、これらのコマンドを使って ssh の設定をコンパイルしています
alias compile-ssh-config='echo -n > ~/.ssh/config && cat ~/.ssh/*.config > ~/.ssh/config'
alias ssh='compile-ssh-config && ssh'
# (This will get used by other programs depending on the ~/.ssh/config)
# (If you need you can run the compile-ssh-config command via cron etc.)
or:
alias compile-ssh-config='echo -n > ~/.ssh/config-compilation && cat ~/.ssh/*.config > ~/.ssh/config-compilation'
alias ssh='compile-ssh-config && ssh -F ~/.ssh/config-compilation'
# (This is saver and won't over write an existing ~/.ssh/config file)
because:
alias ssh='ssh -F <(cat .ssh/*.config)'
は私のために動作しません、戻ります
ssh: Can't open user config file /dev/fd/63: Bad file descriptor
少しでもお役に立てれば幸いです
3 Szymon Jeż 2012-11-27
もう一つ、FUSEベースのソリューション(自分ではテストしていません)
“一つの大きなファイルを管理し続けるのではなく、[…]代わりに、多くの小さな論理的な塊から動的にコンフィグ “ファイルを構築します
FIFO経由でこれをやっている記事も見つけました。http://www.linuxsysadmintutorials.com/multiple-ssh-client-configuration-files/
3 amontero 2013-06-10
これらのエイリアス解決策は、git
やssh
以外のプログラムでは動作しません
手っ取り早くまとめたけど改善した方がいいよ
これを~/.bashrc
に追加します
mkdir -p ~/.ssh/config.d/
[ -e ~/.ssh/config ] && mv ~/.ssh/config ~/.ssh/config.bak.$(date -Ins)
cat ~/.ssh/config.d/* > ~/.ssh/config
セッションを開始するたびに、~/.ssh/config.d
にあるすべてのファイルをマージします。(3行目)
このバージョンの欠点は、~/.ssh/config
を変更した場合、次のセッションを開いたときに変更内容が失われてしまうことです。(2行目) 問題は、しばらくするとたくさんの.bakファイルができてしまうことです
2 Dean Rather 2015-05-19
Ubuntu上のSSHのバージョンをv7.3(Ubuntu Xenial 16.04でテスト済み)にアップグレードするには、Yakketyからパッケージをインストールすれば簡単にできます
echo "deb http://archive.ubuntu.com/ubuntu yakkety main" > /etc/apt/sources.list.d/yakkety.list
apt-get update
apt-get install -y ssh
rm /etc/apt/sources.list.d/yakkety.list
apt-get update
SSH のバージョンを確認する
ssh -V
OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016
SSH で ~/.ssh/config.d ディレクトリからインクルードを使用するように設定します
mkdir ~/.ssh/config.d
sed -i '1iInclude config.d/*' ~/.ssh/config
1 panticz.de 2017-03-21
私の間抜けな答えは
- Xenial (16.04) に OpenSSH > 7.3 をインストールしようとしました
- 混乱が好きではなかった
だから私はこれに落ち着きました
- 別々の OpenSSH 設定ファイルは
~/.ssh/config.d/
に保管してください - 1を変更するときは、
cat ~/.ssh/config.d/* > ~/.ssh/config
を行います - あなたが OpenSSH 7.3p1 以降のバージョンのディストロにアップグレードした輝かしい日には、 代わりに OpenSSH 7.3p1 を含むファイルを作成することができます
Include config.d/*
0 Adrian 2018-05-06
私のマシンでもSSHのアップグレードができません
私はGNU makeを使って、必要なときだけssh設定ファイルを生成していました
# Concatenates all the .config files.
aInput = *.config
aOutput = ~/.ssh/config
aCurrentMakefile = $(lastword $(MAKEFILE_LIST))
$(aOutput): $(shell ls $(aInput)) $(aCurrentMakefile)
@echo "Generating $(aOutput)"
@echo "# File generated by $(aCurrentMakefile) on $(shell date +'%F %T.%6N')" > $(aOutput)
@cat $(aInput) >> $(aOutput)
そして、sshはエイリアスされています
alias ssh='make -s -f ~/Tools/config.d/makefile -C ~/Tools/config.d && ssh'
それは魅力的に機能します
0 Benjam 2018-08-16