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

标签 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

我想通过搜索 Host bloo 来获取字符串 '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 的答案。

最佳答案

您可以使用ssh配置测试模式来解析配置文件并返回您期望的值:

ssh -G hostname | grep "^user "

openssh-6.8 开始这应该可以工作。

关于Bash 从 ssh 配置文件中提取特定主机的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38304271/

相关文章:

unix - 寻找匹配的 `"时出现意外 EOF '

python - 在 bash 中将数据粘贴在一起

bash 脚本 : echo >> returns error "No such file or directory"

linux - bash 粘贴不保留换行符

git - "bash: fork: retry: No child processes "运行 docker 快速启动终端或/git bash shell 时

jenkins - jenkins可以ssh到另一个用户,但是pgp仍然认为它是jenkins用户

bash - ERROR : (gcloud. services.enable) User does not have permission to access project (or it may not exist): 调用者没有权限

java - 通过 ssh 发送命令并读取输出结果

linux - 期望脚本执行状态

bash - sed 或 awk 删除包括换行符的模式