ssh_configファイルから特定のホストの設定を抽出して変数に入れたいです。
Host mysite
HostName 123.1.1.1
User myuser
Port 13245
GSSAPIAuthentication no
IdentityFile /home/myuser/.ssh/id_dsa
Host anothersite
HostName 321.2.2.2
User myuser
Port 22
GSSAPIAuthentication no
IdentityFile /home/myuser/.ssh/anothersite_dsa
まず、ホスト名を一致させてから、指定した設定で最初に表示される値を一致させる必要があります。私はちょうど基本正規表現を学び始め、自分で学んだが、時間が多すぎて助けが必要です。このスクリプトは、「Host mysite」と一致した後に最初に表示される「IdentityFile」を探し、「IdentityFile」という単語を「test」に置き換えます。
IDF="IdentityFile"
HOST="mysite"
get_host_option() {
option="$IDF"
[ -f /etc/ssh/ssh_config ] || return
perl -0pe 's/(?<=Host[[:space:]]'"$HOST"')(.*?)'"$option"'/$1test/s' /etc/ssh/ssh_config
}
get_host_option "$IDS"
私にとって必要なのは、IdentityFileの変数に設定されたパスです。だからこうして使えます。
ssh-add $IDPATH
答え1
この試み:
perl -0ne 'print $& if /^Host.*?IdentityFile\s+\K[^\n]+/ms' file