【问题标题】:how to write a function in bash_profile如何在 bash_profile 中编写函数
【发布时间】:2017-08-22 05:42:58
【问题描述】:

我们如何编写一个简单的常规函数​​,我可以将它放入我的 bashprofile 可用于将控制台保护到我想要的任何主机。

但我的安全控制台必须通过跳转主机。这就是问题所在。

function func_name () {
 ssh jumphostname; 
 sc $hostname # from jump host secure console to another host given as input from terminal
}

此功能仅使登录跳转主机而不是从那里安全控制台进入另一个主机。

-bash-4.1$func_name host.me.com 应该通过 jumphost 给我到 host.me.com 的控制台

这个功能不可能吗? 我必须写一个脚本吗?

【问题讨论】:

  • 不,你需要更具体,我建议你重新措辞更合适的问题,因为这不是关于如何编写 bash 函数,而是更多关于 ssh从本地站远程控制。
  • 当我试图把你想做的事情放在一起时,我最终想知道为什么你不能只是 ssh user@host 并从那里开始工作?就像我说的那样,如果你更具体,也许给出一个用例场景,那么人们可能会提供帮助。对于通用的远程控制和异常处理,我经常使用expect wrappers
  • 是的。我把问题说得更具体了。
  • 我在另一个答案here中解释了一个易于遵循的过程@

标签: linux bash function shell alias


【解决方案1】:

这就是我的做法。

  1. 在家中创建函数文件夹
  2. 将我的函数编写为 shell 脚本
  3. 在我的 bash_profile 中将该文件作为别名引用
  4. 重置源

例子

mkdir ~/.functions
echo '#!/bin/bash
      echo $1' > ~/.functions/ekho
echo 'alias ekho="sh ~/.functions/ekho"' >> ~/.bash_profile
source ~/.bash_profile

现在您可以永远从任何位置调用您的方法。

ekho "Wow"

【讨论】:

    【解决方案2】:

    以下链接将帮助您继续前进

    ssh username@host_address "command to execute"
    

    例如输出:

    arul@OA2:~/work/images$ ssh arul@localhost echo "hai"
    arul@localhost's password: 
    hai
    arul@OA2:~/work/images$
    

    ssh arul@localhost 命令将登录并在当前登录提示符中打印“echo hai”命令”

    引用:https://www.cyberciti.biz/faq/unix-linux-execute-command-using-ssh/

    【讨论】:

    • 欢迎来到 StackOverflow。请注意,通常可以通过自己实际解释您的预期答案来改进仅链接的答案,包括与链接直接相关的任何内容,并且仅链接以获取更多信息。参见例如meta.stackexchange.com/questions/8231/…
    • 感谢您的宝贵意见@kojiro
    【解决方案3】:

    我会写这个

    con.sole() {
        if ! ssh -T jumphostname true; then
            printf 'Jump host "%s" not available.\n' jumphostname >&2
            return 1
        fi
        sc "$@"
    }
    

    The square brace isn't part of the if statement syntax.是一个单独的命令,和test一样。

    【讨论】:

    • 上面的脚本让我直到 jumphost。在 con.sole hostname.com 之后它不能 sc 警告:将'jumphost.com (RSA) 永久添加到已知主机列表中。 -bash: sc: 找不到命令
    【解决方案4】:

    你不应该在测试[ ] 中使用命令,除非你在命令周围用$( ) 模拟变量。仍然不确定SSH 是否会返回测试结果。 SSH 需要您喜欢连接的 TTY,而不是您所在的 TTY。这会导致问题!

    一个没有 SSH 的例子 ...

    suleiman@antec:~$ if [ "$(cat ~/test.txt)" ]; then echo "Hello World"; else echo "failed"; fi
    Hello World
    suleiman@antec:~$ if [ "$(cat /this/file/dont/exsist 2>/dev/null)" ]; then echo "Hello World"; else echo "failed"; fi
    failed
    

    加法:

    -bash: sc: 找不到命令

    这意味着您还没有在主机上安装spreadsheet

    此功能只让登录跳转主机不跳转 安全控制台从那里连接到另一台主机。

    你想做什么?

    你知道SSH 做什么吗? 它打开远程TTYs,或者换句话说:它打开一个远程安全控制台

    您不能运行脚本并在其中放置 ssh 登录名,然后认为之后的所有代码都将在新控制台中,这也不会发生。

    您可以在控制台上运行ssh,这样您就可以获得自己的 TTY 并在其中输入一些命令。或者您将ssh 与脚本中的某些命令结合使用,例如

    ssh user@host echo "Hello World!"
    

    您也可以通过ssh 传递一些变量或文本

    echo "Hello World!" | ssh user@host cat
    

    你不能用它做更多的事情,你不应该这样做!

    【讨论】:

    • 我们在 bash_profile 中创建别名。它通过。但是登录后我想从那个跳转主机在那个主机上运行 sc 命令。
    • ssh user@host sc 是你要找的吗?...我更新了我的帖子。
    【解决方案5】:

    因为你没有在 if 和 [... 您想要的正确语法是...

    function con.sole
    {
        if [ ssh jumphostname ]; then
            sc $1;
        else 
            echo "host not available"
        fi 
    }
    

    来自墨西哥的问候! ??

    【讨论】:

    • 在留下空间之后,它也有 -bash: [: ssh: 一元运算符,所以我添加了单引号。它现在可以工作,但真正的问题仍然存在。
    • 想做什么?你想连接一个服务器,然后再连接到另一个?... local->server1->server2?
    • 我认为你需要了解[在shell中的含义;它不是分组运算符。
    猜你喜欢
    • 2011-01-08
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多