在配置文件中查找特定字符串

在配置文件中查找特定字符串

我正在尝试编写 bash 脚本,该脚本读取 .ssh/config 文件并连接到仅使用 IdentityFile 或 ssh 密钥的主机,并在远程服务器上运行命令。因此问题是配置文件包含不使用 IdentityFile 并通过密码连接的主机。如何在文件中明确 grep Host 和 IdentityFile 块并丢弃其他块?我已经编写了使用 for 循环连接到文件中的所有主机的脚本,但这不是我 100% 想要的。谢谢。我的 .ssh/config 文件如下所示:

Host centos7-mp1
        Hostname 192.168.89.102
        user root
        IdentityFile /root/.ssh/keys/id_rsa_passwordless


Host centos6-mp2
        Hostname 192.168.89.103
        user root
        IdentityFile /root/.ssh/keys/id_rsa_passwordless

Host centosvm-test
        Hostname 192.168.56.233
        user test

答案1

awk段落模式对于这种情况很有用 - 你有多行记录由一个或多个空行分隔,例如,要打印Host匹配记录的键(第二个字段)的值,IdentityFile您可以执行

awk '/IdentityFile/ {print $2}' RS= .ssh/config

如果需要IdentityFile不区分大小写匹配,可以将其修改为

awk 'toupper($0) ~ /IDENTITYFILE/ {print $2}' RS= .ssh/config

或(使用 GNU awk)

gawk '/IdentityFile/ {print $2}' RS= IGNORECASE=1 .ssh/config

答案2

在文件内使用 grep 查找特定字符串。对于 grep:

$ grep -i 'string' ~/path/to/config/file/

如果这正是您想要的......

相关内容