當前位置 主頁 > 服務器問題 > win服務器問題匯總 > 最大化 縮小

    ssh遠程執行命令方法和Shell腳本實例

    欄目:win服務器問題匯總 時間:2019-12-31 07:34

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

    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虛擬出一個遠程服務器的終端,在多臺服務器同時部署時確實節約了不少時間!

    下一篇:沒有了
青海十一选五开奖数据 分分彩计划app推荐 网络捕鱼吃分原理 股票开盘时间 手机电玩捕鱼赢钱下载 麻将游戏4人打真人 重庆耍友麻将app 双色球最简单规律技巧 微信打鱼不下分 ipad能看股票行情吗 广东快乐10分在线计划