Bash从ssh配置文件中提取特定主机的用户

时间:2016-07-11 10:08:50

标签: bash ssh sed

我正在编写一个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的答案更可取。

3 个答案:

答案 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兼容的正面外观