sshリモートサーバーを実行するにはsudoの権利を持つスクリプトが必要です。

1668 ワード

前言
运维は非常に不思议な仕事です。牛の强迫运维は简単に复雑な任务を解决できます。sbの运営维は毎日时间がかかっても问题が解决できないかもしれません。
このブログを書く前に、googleは関連記事をまとめました。大体は修正/etc/sudoersと言っています。そしてNOPASSWD:指定のcmdですが、本心は役に立たないです。長距離仮想端末がないという方法は浮雲です。
sshリモート操作を実行する
コマンドの書式
ssh -p $port $user@$p 'cmd'

$port : ssh     
$user: ssh     
$ip:ssh   ip  
cmd:            
準備工作
  • 公私鍵認証またはユーザ名パスワード認証に基づいて、リモートlocal 2サーバにログインすることができます。
  • cmdスクリプトであれば、絶対パス問題(相対パスがリモートで実行される場合はピット)
  • に注意する。
    足りない
    このコマンドは私達の大多数の需要を満たすことができますが、通常は多くのものを展開する時にroot権限が必要です。しかし、いくつかの制限があります。
  • リモートサーバlocal 2 rootユーザ登録禁止
  • リモートサーバスクリプトでIDを変換するには、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.
    日语原文:リモートサーバーの仮想キティターミナルを提供します。このパラメータを加えると、リモートサーバの仮想端末に自分の権利を持つパスワードを入力することができます。非常に安全です。
    コマンドの書式
    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はリモートサーバーの端末を仮想しています。複数のサーバーが同時に配置されている間に時間が節約されました。