解析代理信息的.ssh/config

nwi*_*ler 2 regex bash perl awk sed

我想解析.ssh/config文件中包含的代理信息,并用代理信息显示每个具有相关代理信息的主机.应该过滤掉没有任何代理信息的主机.手册页.ssh/config:http://man-wiki.net/index.php/5:sh_config

这应该在Bash下的Unix shell脚本中完成,因此首选标准工具,如Perl,awk或sed.

示例输入文件:

Host ssh.foo.com
    User ssh
    HostName ssh.foo.com
    Port 443
    ProxyCommand /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth

Host ci
    HostName 127.0.0.2
    User ci

Host nightly
    HostName 192.168.1.1
    User goodnight

Host foobar.org
    User git
    HostName foobar.org
    Port 443
    ProxyCommand /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth

Host integration
    HostName 192.168.1.2
    User int
Run Code Online (Sandbox Code Playgroud)

预期输出应如下所示:

Host: ssh.foo.com - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Host: foobar.org - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Run Code Online (Sandbox Code Playgroud)

这里的困难在于搜索必须覆盖多行.

Bir*_*rei 6

尝试以下awk命令:

awk '
    $1 == "Host" { 
        host = $1 ": " $2; 
        next; 
    } 
    $1 == "ProxyCommand" { 
        $1 = ""; 
        sub( /^[[:space:]]*/, "" ); 
        printf "%s - Proxy: %s\n", host, $0;
    }
' .ssh/config
Run Code Online (Sandbox Code Playgroud)

它产生:

Host: ssh.foo.com - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Host: foobar.org - Proxy: /usr/local/bin/corkscrew proxy 8080 %h %p ~/.ssh/proxyauth
Run Code Online (Sandbox Code Playgroud)