ホームページ >運用・保守 >Linuxの運用と保守 >Linux シェルで ssh コマンドを使用して分散クラスター情報をカウントする方法

Linux シェルで ssh コマンドを使用して分散クラスター情報をカウントする方法

WBOY
WBOY転載
2023-05-11 15:52:06953ブラウズ

1. 分散クラスター情報の統計に関するアイデア

パスワード不要のリモート ログイン コマンドを使用して、あるマシンが他のクラスター内のマシンにアクセスできるようにします。したがって、達成すべき重要な手順がいくつかあります。

  • shh の使用方法を学ぶ

  • パスワードなしのログインを実現する

  • シェルプログラムの書き方

2. SSH暗号化原理

非対称暗号化技術は、暗号化と復号化に異なる鍵を使用する暗号化方式です。このうち、RSA と DSA は非対称暗号化方式です。もちろん、非対称暗号アルゴリズムには、相互に暗号化および復号化できる鍵のペアが存在するという前提があり、通常、この鍵のペアが所有者の公開鍵と秘密鍵になります。公開鍵は他人が知ることができる鍵ですが、秘密鍵は所有者だけが知ることができます。もちろん、秘密鍵が外部に漏洩すると、情報セキュリティ上の問題が発生する可能性があります。

仮定します: A が暗号化されたデータを B に送信したいと考えています。 1 つ目の方法は、A が自分の秘密鍵を使用して暗号化し、B がデータを取得した後に A の公開鍵を使用して復号化するというものです。 2 番目の方法は、A が B の公開キーを使用してデータを暗号化し、B がデータを取得した後、自分の秘密キーを使用してデータを復号化するというものです。

SSH リモート ログインでは、最初の方法が使用されます。

3. SSH コマンド

一般的に使用される方法は、

ssh -i [秘密鍵ファイル名] -p [ポート番号] user@hostname [実行コマンド]

秘密キーのファイル名のデフォルトは $HOME/.ssh/id_rsa または $HOME/.ssh/id_dsa、ポート番号のデフォルトは 22 です。

例:

ssh   myname@128.180.146.89  #输入目标主机的密码后进行远程操作,exit命令退出

4. ssh-keygen と ssh-copy-id を使用してパスワードなしのログインを実現します

ssh-keygen     #直接全部回车,先都默认

その後、キー ペア ファイルが $HOME/.ssh/ ディレクトリに生成されます、このうち *.p​​ub は公開鍵ファイルに統一され、もう 1 つは秘密鍵ファイルです。

次に、公開キー ファイルの内容をターゲット ホスト ユーザーの $HOME/.ssh/authorized_keys にコピーします。コピー方法は自分で手動で操作することも可能です。次のコマンドを使用して、

ssh-copy-id -i [公開キー ファイル名] user$hostname

を実現することもできます。例:

ssh-copy-id -i  $HOME/.ssh/id_rsa.pub  myname@128.180.146.89

そして、リモート ログイン コマンドを実行して、パスワードなしのログインを実現します。 2 回目のログインでもパスワードが必要な場合は、ファイルおよびファイル ディレクトリのアクセス許可の問題が原因である可能性があります。接続されている秘密鍵と公開鍵がペアではないことも考えられます。

5. Linux シェル スクリプトの実装

sshtest.sh ファイル:

#!/bin/bash
func___setenv(){
   RTS_ECT_DIR="$HOME"
   #.....
}
######################################
#
#   程序主体
######################################
 
#调用环境变量
func___setenv
 
#读取机器连接信息
while read line
do
ssh_cmd=
ssh_linkhost=`echo ${line}`
    while  read  cmdline
    do
    #空命令行跳过
    if [ -z "$cmdline" ]; then
        continue 
    fi
    
    #读取的命令行拼接;
    if [ ! -n "$ssh_cmd" ]; then
        ssh_cmd=`echo ${$cmdline}` ;
    else
        ssh_cmd="${ssh_cmd};"`echo ${$cmdline}` ;
    fi
    done <${RTS_ECT_DIR}/sshcmd.cfg
#执行远程命令
ssh $ssh_linkhost $ssh_cmd </dev/null
done <${RTS_ECT_DIR}/sshlink.cfg

sshlink.cfg ファイル: パスワードなしでログインするには、まずキーを設定する必要があります

myname@128.180.146.89
myName@128.180.146.90
Myname@128.180.146.91

sshcmd.cfg ファイル: 必要に応じて

ps -ef|grep java 
df -h

を入力します。第 6 に、ssh は 1 回だけループします。

上記のコードの最後から 2 行目が次のように変更されると、

ssh $ssh_linkhost $ssh_cmd

そうすると、while ループは 1 回だけループします。 while read 行はループ情報を標準入力に入力し、ssh コマンドはすべての入力バッファを読み取るため、while はループ内にありません。したがって、ssh コマンドをリダイレクトする必要があります

以上がLinux シェルで ssh コマンドを使用して分散クラスター情報をカウントする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。