北京快乐8官网|北京快乐8选一秘诀

品略圖書館

linux shell 遠程執行命令---ssh

Linux Shell遠程執行命令(命令行與腳本方式)

shell遠程執行:

經常需要遠程到其他節點上執行一些shell命令,如果分別ssh到每臺主機上再去執行很麻煩,因此能有個集中管理的方式就好了。一下介紹兩種shell命令遠程執行的方法。

前提條件:

配置ssh免密碼登陸

對于簡單的命令:

如果是簡單執行幾個命令,則:

ssh [email protected] "cd /home ; ls"

基本能完成常用的對于遠程節點的管理了,幾個注意的點:

雙引號,必須有。如果不加雙引號,第二個ls命令在本地執行

分號,兩個命令之間用分號隔開

對于腳本的方式:

有些遠程執行的命令內容較多,單一命令無法完成,考慮腳本方式實現:

#!/bin/bashssh [email protected] > /dev/null 2>&1 << eeooffcd /hometouch abcdefg.txtexiteeooffecho done!

遠程執行的內容在“<< eeooff ” 至“ eeooff ”之間,在遠程機器上的操作就位于其中,注意的點:

<< eeooff,ssh后直到遇到eeooff這樣的內容結束,eeooff可以隨便修改成其他形式。

重定向目的在于不顯示遠程的輸出了

在結束前,加exit退出遠程節點

ssh執行遠程操作

命令格式

代碼如下:

ssh -p $port [email protected]$p "cmd"

$port : ssh連接端口號

$user: ssh連接用戶名

$ip:ssh連接的ip地址

cmd:遠程服務器需要執行的操作

準備工作

基于公私鑰認證或者用戶名密碼認證能確保登錄到遠程local2服務器(有點基本運維知識的人做這個事情都不是問題)

cmd如果是腳本,注意絕對路徑問題(相對路徑在遠程執行時就是坑)

不足

這個命令可以滿足我們大多數的需求,但是通常運維部署很多東西的時候需要root權限,但是有幾處限制:

遠程服務器local2禁止root用戶登錄

在遠程服務器腳本里轉換身份用expect需要send密碼,這樣不夠安全

ssh的-t參數

代碼如下:

-t      Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty.

中文翻譯一下:就是可以提供一個遠程服務器的虛擬tty終端,加上這個參數我們就可以在遠程服務器的虛擬終端上輸入自己的提權密碼了,非常安全

命令格式

代碼如下:

ssh -t -p $port [email protected]$ip  "cmd"

示例腳本

代碼如下:

#!/bin/bash

#變量定義

ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3")

user="test1"

remote_cmd="/home/test/1.sh"

#本地通過ssh執行遠程服務器的腳本

for ip in ${ip_array[*]}

do

if [ $ip = "192.168.1.1" ]; then

port="7777"

else

port="22"

fi

ssh -t -p $port [email protected]$ip "remote_cmd"

done

這個方法還是很方便的,-t虛擬出一個遠程服務器的終端,在多臺服務器同時部署時確實節約了不少時間啊!

免責聲明:本文僅代表文章作者的個人觀點,與本站無關。其原創性、真實性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容文字的真實性、完整性和原創性本站不作任何保證或承諾,請讀者僅作參考,并自行核實相關內容。

http://www.kzguv.com.cn/style/images/nopic.gif
我要收藏
個贊
被踩
分享到
分享
評論
首頁
北京快乐8官网