リモートクラスタの複数のディレクトリから複数の映画をダウンロードする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
パスワードなしで使用できます。
- クライアント(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]-----+
$
- SSHサーバー(リモートシステム)が公開鍵を受け入れていることを確認してください。
$ cat /etc/ssh/sshd_config | grep PubkeyAuthentication
#PubkeyAuthentication yes
表示された場合は、PubkeyAuthentication no
ファイルを変更してくださいsystemctl restart sshd
。
- 公開鍵を
~/.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
}
}