『壹』 shell腳本中,用expect命令如何實現自動遠程操作,折磨我好久了..
既然$無法匹配,我覺得你完全可以單獨配置一個環境變數,比如說我登錄到伺服器後
echo "SCPGOGOGO"
expect捕獲到SCPGOGOGO 開始執行scp
expect好久不寫了,不知道$?判斷怎麼寫,如果要寫我的翻書了。
當判斷$?為真,然後執行send "java -jar"。不過我想在仔細思考一下可能會有更好的邏輯。
我不太稀飯expect這種交互寫法。
因為有更多簡單便捷的方法,不知道你為什麼不用。
sshpass ssh密鑰 簡單點直接用sh操作ssh就可以達到你想要的效果,why死扣expect?,
各種集中式管理軟體(puppet,salt,ansible...)都是為了方便遠程操作管理的東西why?不用?
本來1小時解決的問題,死扣expect花了好幾天,這種把一個問題發展到解決2個問題的做事方法不可取。
『貳』 shell腳本中怎麼ssh上遠程機執行命令
你好,
先在兩台機子上建立信任,ssh-key
具體方法網路下就有
腳本里的命令是
ssh 用戶@ip
『叄』 利用shell腳本執行ssh遠程另一台主機執行命令並返回命令的結果集
假設從主機A,檢查主機B上的進程,
需要在主機B上建立檢查用戶,例如叫x,
並設置通過public key認證登錄SSH,不會可以google搜一下,
然後,在A機器上執行:
ssh x@B ~/command.sh > result.txt
command.sh就是B機器上放置在x目錄下的腳本。
輸出結果應該是寫到了result.txt
或者另一種寫法
result=`ssh x@B ~/command.sh`
結果直接保存到result變數中了。
暫時沒有linux環境,所以沒有實際測試,你自己試試吧
免費提供最新Linux技術教程書籍,入門自學書籍《linux就該這么學》,為開源技術愛好者努力做得更多更好
『肆』 Linux遠程執行Shell命令或腳本
1. 遠程執行Shell命令
2. 遠程執行Shell本地腳本
#
『伍』 利用shell命令實現Eeclipse對Android的遠程調試
這篇文章主要講如何自己來做一個apk實現遠程調試,也就是說我們先自己寫一個apk來控制是否啟用遠程調試的功能,然後通過這個apk來啟用遠程調試,接著基於遠程adb的方式來調試以後的程序。聽起來真TM繞口。沒關系,跟著看就行了。實現這個目標分為3步。
好吧,這個逼格的東西並不需要你多麼的了解,我們只需要知道幾條基本的命令。
設置adb的調試埠,當埠>-1的時候,adb是wifi調試,我們默認的一般將埠設置為5555
setprop service.adb.tcp.port 5555
對應的將埠設置為-1或者更小的數值,則將調試方式變為了usb調試
setprop service.adb.tcp.port -1
關閉adb
stop adbd
打開adb
start adbd
好了有了這幾個命令的基礎,就可以實現usb和wifi調試方式的轉換了
怎麼執行,鬼才管呢。我又不是搞底層的。對於執行shell命令,自有高手早已寫好的工具類,這里將源碼貼上
我們需要用到的方法是
解釋下三個參數的意思
參數1:需要執行的命令數組
參數2:是否已經root過。oh天,忘了說,你的手機必須要先root才能來做這件事情,至於root的方式,太多了,什麼root大師,xx大師。
參數3:是否需要返回結果,這個可有可無,如果你選擇返回結果,我想多半是你想知道這些命令有沒有執行成功,你只需要判斷
CommandResult .result
的值是否為0,對的,linux就是這樣,等於0就是成功了的意思
ok,剩下的活你應該會做了,寫一個button控制項,監聽點擊事件,在事件中調用這個方法。至於參數一怎麼寫,當需要打開wifi調試的時候就這樣寫
當需要關閉wifi調試的時候,只需要將5555改為-1就行
好的,現在你可以將apk編譯到你的手機上,並且打開wifi調試,接著在如下目錄
你可以通過 shift+右鍵 的方式有個「在此處打開命令行」。然後輸入
adb connect xxxx
xxxx 是你的手機ip,埠不用輸,默認就是5555,手機ip你可以在設置-關於手機-手機狀態 中找到
於是「噌」的一下,你的eclipse里的device窗口就顯示你的破手機已經連接上了,現在你可以丟掉數據線,靜靜的裝逼了。真是有逼格的燒連啊。
斷開連接,你可以在手機上斷開,也可以在pc上通過
來斷開,當然在手機上斷開保險一點。
好的,有問題的同學可以留言,啊哈哈哈哈哈,這都不會,你好笨啊。
『陸』 本地shell腳本中ssh到遠程伺服器並執行命令
在實際運用中在當前伺服器執行命令後,需要在另一台伺服器繼續執行某些命令,分開去到另一台伺服器執行也是比較麻煩的,因此整理下集中執行的方式
1、首先配置ssh免密操作
Linux 下實現SSH互信: https://www.jianshu.com/p/2456d98aa607
2、簡單命令
ssh [email protected] "cd /var/lib; ls; cd "
2.1 使用時注意,雙引號必須有。若沒加雙引號,第二條及之後的命令會在本地執行
2.2 分號是將兩條語句間隔開
2.3 單雙引的區別:單引號不會解析值,是什麼就傳什麼;雙引號會解析值,將解析結果傳過去
3、多條命令
ssh [email protected]<< reallssh
cd /var/lib/test
tar -zxvf api.com.tar.gz
......
exit
reallssh
3.1 命令寫在 << reallssh(開始) 至 reallssh(結束) 之間
3.2 reallssh可自己定義為其他形式
3.3 在結束前加上exit退出遠程
4、可能遇到的問題
問題:遠程登錄主機時出現Pseudo-terminal will not be allocated because stdin is not a terminal. 錯誤
解決方案:字面意思是偽終端將無法分配,因為標准輸入不是終端。
所以需要增加-t -t參數來強制偽終端分配,即使標准輸入不是終端。
to force pseudo-tty allocation even if stdin isn』t a terminal.
參考樣例如下:
ssh -t -t [email protected] -p 22
--------------------------------------------------------------------------------
參考:https://blog.csdn.net/jinking01/article/details/84386769
『柒』 如何使用python執行遠程shell腳本
最近有個需求就是頁面上執行shell命令,第一想到的就是os.system,
代碼如下:
os.system('cat /proc/cpuinfo')
但是發現頁面上列印的命令執行結果 0或者1,當然不滿足需求了。
嘗試第二種方案 os.popen()
代碼如下:
output = os.popen('cat /proc/cpuinfo')
print output.read()
通過 os.popen() 返回的是 file read 的對象,對其進行讀取 read() 的操作可以看到執行的輸出。但是無法讀取程序執行的返回值)
嘗試第三種方案 commands.getstatusoutput() 一個方法就可以獲得到返回值和輸出,非常好用。
代碼如下:
(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output
Python Document 中給的一個例子,
代碼如下:
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
『捌』 如何在Windows實現遠程調用Linux下的shell指令
可以用ssh協議遠程連接linux伺服器就可以使用linux伺服器上的shell指令了,下載個xshell軟體,通過linux的用戶名和密碼 IP 就可以連接上了
也可以安裝開源軟體gow,在網上就可以下載到,這個軟體是在windows下運行linux指令,不知道你是否需要
通過以上兩種方法均可以運行linux下的shell