从.bash_aliases迁移到〜/ .ssh / config

时间:2012-11-30 23:55:02

标签: parsing ssh vi bash

这是我在这里的第一篇文章,所以请耐心等待......

在完全配置我的.bash_aliases文件后,我发现了.ssh / config的惊人功能,而且由于我对编程非常蹩脚,我正在寻找一种很好的方法来解析bash_aliases文件中的连接细节〜/ .ssh / config文件。

所以,进入细节,我的bash_aliases看起来像这样:

alias serverA='ssh -i ~/.ssh/serverA.key -o $SRVR_ALV user@serverAhostname'
alias serverB='ssh -i ~/.ssh/serverB.key -o $SRVR_ALV user@serverBhostname'
....

我在$ SRVR_ALV中为ServerAliveInterval定义了一个变量。

我的意图是解析这个条目,同时摆脱那个丑陋的变量

Host serverA
HostName serverAhostname
IdentityFile ~/.ssh/serverA.key

Host serverB
.....

您认为执行此操作的最佳方式是什么?我正在寻找一个不错的bash脚本,或者可能正在使用vi功能。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

Perl怎么样?

perl -ne "/^alias (.*)='ssh -i (.*) -o (.*) (.*)\@(.*)'/ and 
    print qq{Host \$1\nHostName \$5\nIdentityFile \$2\n\n}" < \
 ~/.bash_aliases

如果您喜欢所看到的内容,请将其重定向以附加到>> ~/.ssh/config

[更新] - 非Perl用户对正在发生的事情的解释:

perl -ne-e表示'下一个参数是( e )xecute'的脚本。 -n means, '*run the given script once per line*' - so - {NE {1}} sed`

perl代码:

can sort-of 
emulate

读取:仅针对与正则表达式/^alias (.*)='ssh -i (.*) -o (.*) (.*)\@(.*)'/ and print qq{Host \$1\nHostName \$5\nIdentityFile \$2\n\n} 匹配的行,打印字符串(/^alias ../与Perl中的qq{...}相同)和插值变量"...""\$1"等是正则表达式中捕获的内容的结果。

"\$4"需要输入,它来自perl -ne