2017-03-28 79 views
0

我們如何編寫一個簡單的常規函數​​,我可以將它放在我的bashprofile 中,該函數可用於將控制檯安全地保存到我想要的任何主機。如何在bash_profile中編寫函數

但我的安全控制檯必須通過跳轉主機。這是問題。

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

此功能只能登錄到跳轉主機,而不能將secureconsole從另一個主機中安全地登錄到另一個主機。

-bash-4.1 $ FUNC_NAME host.me.com 應該給我通過jumphost控制檯來host.me.com

是功能這不可能? 我必須寫腳本嗎?

+3

不,你需要更加具體,我建議你重新字你的問題是比較合適的,因爲這與其說是如何編寫一個bash的功能,但更多的SSH遠程控制從本地站。 – hmedia1

+0

當我嘗試將你想要做的事情放在一起時,我最終想知道爲什麼你不能只是'ssh user @ host'並從那裏工作?就像我說的,如果你更具體,也許給出一個用例場景,那麼人們可能會提供幫助。對於多功能的遠程控制和異常處理,我經常使用'expect'包裝 – hmedia1

+0

是的。我提出了更具體的問題。 – stackuser

回答

-2

它,因爲你不離開,如果從墨西哥[... 在您需要的正確sintax是...

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

問候之間的空白!

+0

離開空間後它也有--bash:[:ssh:一元運算符的預期,所以我加了單引號。它現在有效,但真正的問題仍然存在。 – stackuser

+0

正在做什麼?你想連接一臺服務器,然後連接到另一臺服務器嗎?...... local-> server1-> server2? –

+0

我認爲你需要了解''在shell中的含義;它不是一個分組操作員。 – chepner

0

除非您在命令周圍使用$()模擬變量,否則不應在測試[ ]中使用命令。仍然不確定SSH將返回一些測試。 SSH需要TTY你喜歡連接,而不是你在的TTY。這會導致問題!

沒有SSH的例子...

[email protected]:~$ if [ "$(cat ~/test.txt)" ]; then echo "Hello World"; else echo "failed"; fi 
Hello World 
[email protected]:~$ 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通過

echo "Hello World!" | ssh [email protected] cat 

沒有太多越多,你可以用它和你做不應該!

+0

我們在bash_profile中創建別名。它通過。但登錄後,我想從該跳轉主機在該主機上運行sc命令。 – stackuser

+0

'ssh user @ host sc'是你在找什麼?..我更新了我的帖子。 – suleiman

0

下面的鏈接將幫助您繼續

ssh [email protected]_address "command to execute" 

輸出示例:

[email protected]:~/work/images$ ssh [email protected] echo "hai" 
[email protected]'s password: 
hai 
[email protected]:~/work/images$ 

SSH了Arul @本地命令將登錄和「回聲海」命令打印在當前提示登錄」

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

+0

歡迎來到StackOverflow。請注意,通常可以通過自己實際解釋您的預期答案(包括與鏈接直接相關的任何內容)並僅鏈接以獲取更多信息來改進僅鏈接答案。見例如https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers – kojiro

+0

感謝您的寶貴意見@kojiro –

0

我會寫第是

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

The square brace isn't part of the if statement syntax.它是一個單獨的命令,相同test

+0

上面的腳本讓我直到jumphost。它不能sc後,con.sole hostname.com 警告:永久性地將'jumphost.com(RSA)添加到已知主機列表。 -bash:sc:找不到命令 – stackuser