ホームページ >運用・保守 >Linuxの運用と保守 >Linux シェルで ssh コマンドを使用して分散クラスター情報をカウントする方法
パスワード不要のリモート ログイン コマンドを使用して、あるマシンが他のクラスター内のマシンにアクセスできるようにします。したがって、達成すべき重要な手順がいくつかあります。
shh の使用方法を学ぶ
パスワードなしのログインを実現する
シェルプログラムの書き方
非対称暗号化技術は、暗号化と復号化に異なる鍵を使用する暗号化方式です。このうち、RSA と DSA は非対称暗号化方式です。もちろん、非対称暗号アルゴリズムには、相互に暗号化および復号化できる鍵のペアが存在するという前提があり、通常、この鍵のペアが所有者の公開鍵と秘密鍵になります。公開鍵は他人が知ることができる鍵ですが、秘密鍵は所有者だけが知ることができます。もちろん、秘密鍵が外部に漏洩すると、情報セキュリティ上の問題が発生する可能性があります。
仮定します: A が暗号化されたデータを B に送信したいと考えています。 1 つ目の方法は、A が自分の秘密鍵を使用して暗号化し、B がデータを取得した後に A の公開鍵を使用して復号化するというものです。 2 番目の方法は、A が B の公開キーを使用してデータを暗号化し、B がデータを取得した後、自分の秘密キーを使用してデータを復号化するというものです。
SSH リモート ログインでは、最初の方法が使用されます。
一般的に使用される方法は、
ssh -i [秘密鍵ファイル名] -p [ポート番号] user@hostname [実行コマンド]
秘密キーのファイル名のデフォルトは $HOME/.ssh/id_rsa または $HOME/.ssh/id_dsa、ポート番号のデフォルトは 22 です。
例:
ssh myname@128.180.146.89 #输入目标主机的密码后进行远程操作,exit命令退出
ssh-keygen #直接全部回车,先都默认
その後、キー ペア ファイルが $HOME/.ssh/ ディレクトリに生成されます、このうち *.pub は公開鍵ファイルに統一され、もう 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 回目のログインでもパスワードが必要な場合は、ファイルおよびファイル ディレクトリのアクセス許可の問題が原因である可能性があります。接続されている秘密鍵と公開鍵がペアではないことも考えられます。
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
上記のコードの最後から 2 行目が次のように変更されると、
ssh $ssh_linkhost $ssh_cmd
そうすると、while ループは 1 回だけループします。 while read 行はループ情報を標準入力に入力し、ssh コマンドはすべての入力バッファを読み取るため、while はループ内にありません。したがって、ssh コマンドをリダイレクトする必要があります
以上がLinux シェルで ssh コマンドを使用して分散クラスター情報をカウントする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。