我正在编写一个bash脚本,我需要从ssh配置文件中获取特定用户。 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'并通过搜索Host bloo将其放入变量中。
我能够使用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的答案更可取。
答案 0 :(得分:3)
您可以使用ssh
配置测试模式来解析配置文件并返回预期值:
ssh -G hostname | grep "user "
这应该从openssh-6.8
开始。
答案 1 :(得分:1)
根据123上面的评论:
var=$(awk '/^Host bloo$/{x=1}x&&/User/{print $2;exit}' ssh.conf)
这会将值ABCDEF
分配给var。
答案 2 :(得分:0)
添加到@Jakuje的正确答案。这将只返回用户名
$ ssh -G hostname | grep -m1 -oP "(?<=user ).*"
ubuntu
其中grep参数表示
-m1
-在首次比赛后停止阅读
-o
-仅打印该行的匹配部分
-P
-在正则表达式后面使用与Perl兼容的正面外观