2016-11-07 170 views
0

我是linux和shell腳本的新手。我想連接到本地主機並進行交互。使用shell和傳遞命令打開telnet

#! /bin/bash 
(exec /opt/scripts/run_server.sh) 

當我執行這個bash腳本時,它開始監聽端口。

Listening on port xxxxx 

現在我想發出此命令「遠程登錄本地主機XXXXX」 我想是這樣的:

#! /bin/bash 
(exec /opt/opencog/scripts/run_server.sh)&& 
telnet localhost xxxxx 

它仍然是在端口上偵聽。但我認爲第二個命令沒有運行。我希望另一個窗口顯示它正在像這樣連接。

[email protected]:~$ telnet localhost xxxx 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
server> 

爲什麼我執行這些作爲一個腳本,在服務器自動,我需要通過發出這樣的「供應鏈管理」,「某些命令進行一些處理解析」等原因.....

[email protected]:~$ telnet localhost xxxx 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
server>scm 
Entering scheme shell; use ^D or a single . on a line by itself to exit. 
guile> (parse "i eat apple") 

我有很多文字來。手動我不能發出這個解析命令爲每個句子。所以我想自動化。所以我需要編寫一個連接到服務器和交互的腳本。

任何指導方針。最後如何交互/發送命令到這個guile shell?

+3

什麼是「但這並不成功」。其實是指?怎麼了? _確切地說... _ – arkascha

+0

你有沒有必要在子shell中運行第一個腳本的原因? – Inian

+1

並且在shell腳本中使用'(exec)'通常不是必需的。你是因爲特殊情況,還是因爲習慣了'python'或其他語言的cmd?但是,即使你刪除這個例子也不會有太大的作用。從cmd行獲取工作。也許你需要在'/ path/to/server -opts x y z file&'後臺運行你的服務器。然後查看它是否在端口上響應telnet連接。祝你好運。 – shellter

回答

2

一種以相同或不同用戶的身份登錄到Linux服務器並運行某些命令或.sh腳本(對提交後掛接或cron作業非常有用)的方法是使用名爲sshpass的程序,例如cron作業命令或SVN post-commit鉤子應該是這樣的:

/usr/bin/sshpass -p 'password' /usr/bin/ssh 
-o StrictHostKeyChecking=no -q [email protected] 'any command' 

與密碼只需更換密碼,並與您的用戶的用戶,並把你需要爲特定的用戶身份運行命令

要在Ubuntu上安裝sshpass,只需鍵入

apt-get install sshpass 

或者在CentOS

yum install sshpass 
0

我解決了這個與netcat的(NC)命令。

$ echo "command1\ncommand2\n" | nc localhost xxxxx 

我可以使用telnet localhost xxxx手動連接到localhost,然後我可以像這樣將命令從shell傳遞到localhost。

+1

這可能不起作用,具體取決於服務器,因爲TELNET協議不是TCP上的簡單純文本(客戶端和服務器在連接設置期間交換一些信息)。我不知道任何'nc'標誌自動支持。因此'telnet'比'nc'好,但是由於它不能很好地處理像'nc'這樣的標準輸入,'expect'是一個運行'telnet'的好工具,能夠正確處理輸入/輸出。 –