2016-07-11 54 views
2

我在寫一個bash腳本,我需要從ssh配置文件中獲取特定用戶。 ssh的配置文件看起來有點像這樣:Bash從ssh配置文件中提取特定主機的用戶

HOST blag 
    HostName blag.net.au 
    Port 2683 
    User blaguser 
Host bloo 
    User ABCDEF 
    IdentityFile ~/.ssh/id_rsa 
HOST biff 
    HostName biff.net.au 
    Port 2683 
    User biffuser 

我想獲得字符串「ABCDEF」並把它放在一個變量,通過搜索主機布盧。

我能夠使用https://superuser.com/questions/791374/get-variable-values-from-config-file/791387#791387?newreg=6626dd5535194d0180a91b6ace31e16f的答案來讀取配置文件,但它分配的數組與文件中的最後一個主機條目。

我可以使用此回答刪除主機條目How can I remove a Host entry from an ssh config file?。 sed命令在這裏可以編輯,以提取正確的User,但我不確定如何

我遇到了很多麻煩。任何人都可以協助使用sed的答案將是可取的。

+2

'var = $(awk'/^Host bloo $/{x = 1} x &&/User/{print $ 2; exit}'ssh.conf)' – 123

+0

@ 123 Noice。完美的作品,如果你添加這個答案我會接受它。 –

+0

請注意,'openssh'配置不區分大小寫,這可能會讓你愚弄。使用'ssh'本身會讓你免受這些細節的影響。在下面檢查我的答案。 – Jakuje

回答

1

按照上面123的評論:

var=$(awk '/^Host bloo$/{x=1}x&&/User/{print $2;exit}' ssh.conf) 

將分配價值ABCDEF爲VAR。

3

您可以使用ssh配置測試模式來解析配置文件,並返回你的期望值:

ssh -G hostname | grep "user " 

這應該因爲openssh-6.8工作。

+0

我可悲的是版本6.6.1。 –

相關問題