Bashファイルでパスワードを入力してください。

Bashファイルでパスワードを入力してください。

リモートクラスタの複数のディレクトリから複数の映画をダウンロードするbashスクリプトを作成しました。私の問題は、bashファイルがリモートクラスタの「すべての」映画をダウンロードするためにパスワードを要求することです。

パスワードを一度だけ入力すると、すべての映画をダウンロードする方法があるかどうかを知りたいです。誰でも助けてくれてありがとう。私のbashスクリプトは次のとおりです

##! /bin/bash
direc1='foldername1 foldernameg foldername7 foldernames'
for AR     in $direc1       ;do
movname="$AR".avi
for ART     in $movname       ;do
DatFile1="$AR"
DatFile2="$ART"
echo "#######################--NEW--####--DOWNLOAD--###############################"
scp -p -r cluster/directory/$DatFile1/$DatFile2 /home/folder3       

done
done

出力は次のとおりです。

#######################--NEW--####--DOWNLOAD--###############################
your password: 
foldername1.avi                                                                                                        100% 7580KB   1.5MB/s   00:04    
#######################--NEW--####--DOWNLOAD--###############################
your password: 
foldernameg.avi                                                                                                        100% 7580KB   1.1MB/s   00:02   
#######################--NEW--####--DOWNLOAD--###############################
your password: 
foldername7.avi                                                                                                        100% 7580KB   1.7MB/s   00:05    
#######################--NEW--####--DOWNLOAD--###############################
your password: 
foldernames.avi                                                                                                        100% 7580KB   1.9MB/s   00:07 

上記の出力に「パスワード:」というメッセージが表示されたら、各ムービーをダウンロードするにはパスワードを入力する必要があります。

答え1

scpしたがって、ssh設定でSSH公開鍵ログインを有効にしてsshd公開ssh鍵にパスワードがなく、公開鍵が認証された鍵に追加されている場合は、scpパスワードなしで使用できます。

  1. クライアント(scpスクリプトを実行している場所)からSSHキーを生成します。パスワードなしでログインするには、パスワードを空白のままにしてください。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stew/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/stew/.ssh/id_rsa
Your public key has been saved in /home/stew/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:CB8ztwpXrT7lWQj/3W+8IAoHwqTelEBva9/aA7u2w3w stew@stewbian
The key's randomart image is:
+---[RSA 3072]----+
|   .             |
|  . .    .       |
|   ..++ + .      |
|    *ooB = .     |
|   ..B+.S + .    |
|  . +oo+oo + . . |
|   . .+o=oo......|
|       *=E. . . +|
|      .+=o.    oo|
+----[SHA256]-----+
$
  1. SSHサーバー(リモートシステム)が公開鍵を受け入れていることを確認してください。
$ cat /etc/ssh/sshd_config | grep PubkeyAuthentication
#PubkeyAuthentication yes

表示された場合は、PubkeyAuthentication noファイルを変更してくださいsystemctl restart sshd

  1. 公開鍵を~/.ssh/authorized_keysリモートサーバーに追加します。これは、ssh-copy-id <user>@<server>手順1で作成したコンテンツを~/.ssh/id_rsa.pubローカルコンピュータから~/.ssh/authorized_keysサーバーに手動で添付することによって実行できます。

答え2

鍵ベースの認証が最善のアプローチです。リモートエンドが設定されていない場合の問題は何ですか?使用:

#!/usr/bin/env expect
set timeout -1

# enter your password once
stty -echo
send_user -- "Enter your password for the cluster: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set pass $expect_out(1,string)

set folders {
    foldername1
    foldernameg
    foldername7
    foldernames
}

foreach f $folders
    spawn scp -p -r cluster/directory/$f/$f.avi /home/folder3
    expect {
        "your password:" { send "$pass\r"; exp_continue }
        eof
    }
}

関連情報