ssh遠程執行命令方法和Shell指令碼執行個體_linux shell

來源:互聯網
上載者:User

寫這篇部落格之前,我google了一堆相關文章,大都是說修改/etc/sudoers,然後NOPASSWD:指定的cmd,但是真心不管用,沒有遠程虛擬終端這個方法就是浮雲,ubuntu10.04 server 親測!!

ssh執行遠程操作
命令格式

複製代碼 代碼如下:

ssh -p $port $user@$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 $user@$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 $user@$ip "remote_cmd" 
done 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.