sshリモート実行コマンドの概要


このブログを書く前に、私はgoogleに関連する文章をたくさん書いて、大部分は/etc/sudoersを修正して、それからNOPASWD:指定したcmdを言って、しかし本当に役に立たないで、遠隔の仮想端末がないこの方法は浮雲で、ubuntu 10.04 server亲测!! 

sshリモート操作の実行


コマンドフォーマット

ssh -p $port $user@$p 'cmd'

$port : ssh 
$user: ssh 
$ip:ssh ip 
cmd: 

準備作業

  • 公開鍵認証またはユーザー名パスワード認証に基づいて、リモートlocal 2サーバにログインすることを確保できます(基本的なメンテナンス知識のある人がこのことをするのは問題ありません)
  • cmdスクリプトの場合、絶対パスの問題(相対パスはリモート実行時にピット)
  • に注意してください.

    不足

    このコマンドは、私たちのほとんどのニーズを満たすことができますが、通常、メンテナンスに多くのものを配置する際にroot権限が必要ですが、いくつかの制限があります.
  • リモートサーバlocal 2 rootユーザー登録禁止
  • リモートサーバスクリプトでアイデンティティを変換expectでsendパスワードが必要です.これでは安全ではありません.
  • リモート・サーバの実行にsudo権限が必要なスクリプト


    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は1つのリモートサーバーの端末を仮想化して、複数のサーバーが同時に配置する時確かに多くの時間を節約しました!