scpコマンドを使用して、ローカルのUbuntuシステムからリモートのUbuntuシステムにディレクトリをコピーしようとしています。

scpコマンドを使用して、ローカルのUbuntuシステムからリモートのUbuntuシステムにディレクトリをコピーしようとしています。

このスクリプトが実行する作業は、リモートホストへのSSH接続を確立してから、コマンドを使用してディレクトリをターゲットディレクトリscp/home/desktop/Documentsコピーすることです。/home/haca/desktop

スクリプト:

#!/bin/bash

SCRIPT="cd Desktop; pwd;  echo -e 'PASSWORD' | sudo -S scp -r /home/desktop/Documents/ [email protected]:/home/haca/desktop"

HOSTS=("192.168.0.118")
USERNAMES=("haca")
PASSWORDS=("******")
for i in ${!HOSTS[*]} ; do
     echo ${HOSTS[i]}
     SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
     sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"

done

明らかな理由から、このスクリプトではパスワードを省略しました。

なぜ動作しないのか分かりません。スクリプトを実行したときに受け取った出力は次のとおりです。

192.168.0.118
/home/haca/Desktop
[sudo] password for haca: Host key verification failed.
lost connection

どんな指針でも大変感謝いたします。

答え1

Linuxホストが最初に起動すると、通常はSSH「ホストキー」セットが作成されます。ホストに接続すると、ホストはそのキーをSSHクライアントに送信します。コンピュータがキーを認識しない前にこのホストと通信したことがない場合、クライアントは次の警告を表示します。

The authenticity of host 'irobot (192.168.1.1)' cant be established.
ED25519 key fingerprint is SHA256:di+nebThBUTmW57O8sMVtP3X2YGenftovtoPRogvBvI.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

「はい」を選択すると、ホストキーがファイルに追加されます。

$HOME/.ssh/known_hosts

これにより、次にそのホストに接続するときにホストキーを再度要求せずにホストが認識され、SSHが接続されます。間違い:

Host key verification failed.

これは、ホストシステムにホストキーがインストールされていないためです。これを解決する方法はいくつかあります。最も簡単な方法は、SSHがコンピュータにホストキーを保存するように指示するので、手順を手動で実行することです。その後、自動化は問題なく実行する必要があります。

あるいは、ssh-keyscanユーティリティを使用してホストキーを保存することもできます。たとえば、次のようになります。

ssh-keyscan SOME_HOSTNAME >> $HOME/.ssh/known_hosts

関連情報