我们如何编写一个简单的常规函数,我可以将其添加到我的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
这个功能不可能吗? 我必须写一个脚本吗?
答案 0 :(得分:0)
除非您使用命令[ ]
模拟变量,否则不应在测试$( )
中使用命令。仍不确定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
你可以用它做更多的事情,你不应该这样做!
答案 1 :(得分:0)
以下链接可帮助您继续
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命令将登录并且&#34; echo hai&#34;在当前登录的提示&#34;
中打印的命令引文:https://www.cyberciti.biz/faq/unix-linux-execute-command-using-ssh/
答案 2 :(得分:0)
我会写这个
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
相同。
答案 3 :(得分:0)
这就是我的方法。
示例
mkdir ~/.functions
echo '#!/bin/bash
echo $1' > ~/.functions/ekho
echo 'alias ekho="sh ~/.functions/ekho"' >> ~/.bash_profile
source ~/.bash_profile
现在,您可以永远从任何位置调用方法。
ekho "Wow"
答案 4 :(得分:-2)
因为你不会在if和[...之间留下一个空格。 你想要的正确的sintax是......
function con.sole
{
if [ ssh jumphostname ]; then
sc $1;
else
echo "host not available"
fi
}
来自墨西哥的问候!