GNU/Linux >> Linux の 問題 >  >> Linux

Ssh –ネットワーク内のScpを自動化するスクリプト?

Linuxマシンでいっぱいのネット​​ワークがあります。このネットワークには、 user1というユーザーがいます。 パスワードをパスワードとして すべてのマシンで。

user1のホームディレクトリにファイルを配置するための次のスクリプトがあります ネットワークのすべてのマシンで。

#!/usr/bin/expect -f

# connect via scp
spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do
spawn scp /home/user1/Desktop/filetobesent.txt [email protected]${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yesr"
exp_continue
}
-re ".*sword.*" {
exp_send "passwordr"
}
}
interact
done

問題は、「can't read line. No such variable 「。ただし、回線変数の代わりにIPアドレスを直接使用すると、ファイルを転送できます。

編集 :IPlistfile.txtには、ネットワーク内のIPアドレスのリストが含まれています。各行には単一のIPアドレスが含まれています。

承認された回答:

これを行うにはいくつかの方法が考えられますが、パスワードなしのsshを設定することを強くお勧めします。 アクセス、後で私に感謝します。

1。マシンへのパスワードなしのアクセスを設定します。

これは、マシンに再度接続する必要があるため、これがはるかに最良の方法であり、これにより、作業がはるかに楽になります。また、暗号化されていないパスワードを投げかけることがないため、空のパスフレーズを使用することを選択した場合でも、他のオプションよりもはるかに安全です。

まず、パブリックsshを作成します マシンのキー:

ssh-keygen -t rsa

最初のを入力するように求められるパスフレーズを求められます ログインするたびにsshコマンドを実行する時間。これは、複数のsshの場合を意味します またはscp コマンドを入力する必要があるのは1回だけです。それでも、完全にパスワードなしでアクセスできるように、空のままにしておくことができます。

公開鍵を生成したら、それをコピーします(user1として) )ネットワーク内の各コンピューターへ:

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$ip 
done < IPlistfile.txt

各IPのパスワードを手動で入力する必要があります(この手順でも以下の解決策のいずれかを使用する場合を除く)が、一度入力すると、次の簡単な方法でこれらのマシンのいずれかにファイルをコピーできるようになります。

while read ip; do
  scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

sshpassをお持ちの場合 インストールすると、これを自動化できるため、マシンごとにパスワードを入力する必要がありません。

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

2。 sshpassをインストールします

これは、sshを渡すことができる気の利いた小さなプログラムです。 コマンドラインパラメータとしてのパスワード。これは明らかに安全性の高いソリューションではないため、man sshpassの「セキュリティに関する考慮事項」セクションを読むことを強くお勧めします。 。

とにかく、それはおそらくあなたのディストリビューションのリポジトリで利用可能であり、Debianベースのシステムではそれをインストールすることができます

sudo apt-get install sshpass

RedHatベースのマシンを持っていないため確認できませんが、ここで検索するとわかる限り、Fedoraにインストールできるはずです

sudo yum install sshpass

インストールしたら、簡単に実行できます

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

-e オプションはsshpassに指示します SSHPASSからパスワードを取得するには 変数。これは、-pを使用してパラメーターとして指定するよりも少し安全です。 オプション。

関連:SSHとホームディレクトリのアクセス許可?

重要:

接続しているサーバーが不明で、その公開鍵がマシンに保存されていない場合、これはサイレントに失敗します。これが機能していないように思われる場合は、一度接続するだけです(ssh またはscp )リモートマシンに送信し、その公開鍵を受け入れます。

3。 pscpを使用する 代わりに

pscp scpの代替です これは、パスワードをコマンドラインパラメーターとして受け入れます。 Debianベースのシステムでは、これは

でインストールできます。
sudo apt-get install putty-tools

前に言ったように、確認することはできませんが、Fedoraにインストールできるはずです

sudo yum install putty

その後、

を使用してファイルをコピーできます。
while read ip; do
  pscp -pw password /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Linux
  1. Ssh – Sshサーバーにログインするためのシェルスクリプト?

  2. Ssh –スクリプトにパスワードを渡す?

  3. ファイル名にスペースが含まれるスクリプトで問題が発生しましたか?

  1. 中間マシンを介してScpする方法は??

  2. 11 Linux で便利な「ssh」および「scp」コマンド

  3. user-data (cloud-init) スクリプトが EC2 で実行されない

  1. ターミナル出力をコピーするには?

  2. 転送された ssh エージェントで scp を使用する

  3. 複数の scp スレッドを同時に実行する