这是我在这里的第一篇文章,所以请耐心等待......
在完全配置我的.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功能。 提前谢谢!
答案 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
。