【问题标题】:Migrating from .bash_aliases to ~/.ssh/config从 .bash_aliases 迁移到 ~/.ssh/config
【发布时间】:2012-11-19 05:51:15
【问题描述】:

这是我在这里的第一篇文章,所以请多多包涵……

在完全配置了我的 .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 功能。 提前致谢!

【问题讨论】:

    标签: parsing ssh vi bash


    【解决方案1】:

    一些 Perl 怎么样?

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

    如果您喜欢您所看到的,请将其重定向到附加到&gt;&gt; ~/.ssh/config

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

    perl -ne: -e 表示,'下一个参数是 (e)xecute' 的脚本。 -nmeans, '*run the given script once per line*' - so-necan sort-of emulatesed`。

    perl 代码:

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

    读取:仅对于匹配正则表达式/^alias ../的行,打印一个字符串(qq{...}与Perl中的"..."相同),并且插入变量"\$1""\$4"等是结果正则表达式中捕获的内容。

    perl -ne 需要 input,它来自 &lt; ~/.bash_aliases

    【讨论】:

    • @Ichikata 嘿,这有帮助吗?
    • 我刚刚在邮件中看到了通知,不得不检查一下。我的工作就像一个魅力,现在我必须分析脚本并稍微调整一下,为每个主机添加一个“用户”行。感谢您的及时回复!!!!
    • @Ichikata - 没什么好分析的,但我给你留下了一个解释,以防万一。
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2013-03-04
    • 1970-01-01
    • 2018-10-02
    • 2010-12-24
    相关资源
    最近更新 更多