88

UNIX システムのディレクトリに n 個のファイルがあります。これらすべてのファイルを scp 経由で指定されたリモート システムに転送するシェルスクリプトを作成する方法はありますか。ファイルごとにパスワードを入力する必要がないように、スクリプト内でパスワードを指定します。

4

14 に答える 14

42
#!/usr/bin/expect -f

# connect via scp
spawn scp "user@example.com:/home/santhosh/file.dmp" /u01/dumps/file.dmp
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "PASSWORD\r"
  }
}
interact

http://blogs.oracle.com/SanthoshK/entry/automate_linux_scp_command

于 2011-12-16T00:34:37.393 に答える
22

これを試してみませんか?

password="your password"
username="username"
Ip="<IP>"
sshpass -p "$password" scp /<PATH>/final.txt $username@$Ip:/root/<PATH>
于 2015-11-16T06:32:47.203 に答える
10
#!/usr/bin/expect -f
spawn scp -r BASE.zip abhishek@192.168.1.115:/tmp
expect "password:"
send "wifinetworks\r"
expect "*\r"
expect "\r"
于 2010-07-12T09:47:29.080 に答える
5

rsyncは、rcpとほぼ同じように動作するプログラムですが、さらに多くのオプションがあり、rsyncリモート更新プロトコルを使用して、宛先ファイルが更新されるときにファイル転送を大幅に高速化します。

rsync remote-updateプロトコルを使用すると、rsyncは、このパッケージに付属するテクニカルレポートに記載されている効率的なチェックサム検索アルゴリズムを使用して、ネットワーク接続を介して2セットのファイル間の違いだけを転送できます。


ある場所から別の場所へのフォルダのコピー

   #!/usr/bin/expect -f   
   spawn rsync -a -e ssh username@192.168.1.123:/cool/cool1/* /tmp/cool/   
   expect "password:"   
   send "cool\r"   
   expect "*\r"   
   expect "\r"  
于 2011-08-17T12:38:42.447 に答える
5

ワイルドカードや複数のファイルはどうですか?

scp file1 file2 more-files* user@remote:/some/dir/
于 2009-08-28T11:49:15.307 に答える
4

スクリプトを実行するたびにパスワードを 1 回入力しても問題ない場合は、SSH マスター接続を使用して簡単に入力できます。

#!/usr/bin/env bash

USER_AT_HOST="user@host"  # use "$1@$2" here if you like
SSHSOCKET=~/".ssh/$USER_AT_HOST"

# This is the only time you have to enter the password:
# Open master connection:
ssh -M -f -N -o ControlPath="$SSHSOCKET" "$USER_AT_HOST"

# These do not prompt for your password:
scp -o ControlPath="$SSHSOCKET" file1.xy "$USER_AT_HOST":remotefile1.xy
scp -o ControlPath="$SSHSOCKET" file2.xy "$USER_AT_HOST":remotefile2.xy

# You can also use the flag for normal ssh:
ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo hello"
ssh -o ControlPath="$SSHSOCKET" "$USER_AT_HOST" "echo world"

# Close master connection:
ssh -S "$SSHSOCKET" -O exit "$USER_AT_HOST"
于 2014-07-02T18:20:26.420 に答える
2

ssh の公開鍵/秘密鍵のみで実行できます。または、パスワードを設定できるパテを使用します。scp は、コマンド ラインでのパスワードの指定をサポートしていません。

公開/秘密キーの手順については、http: //www.softpanorama.org/Net/Application_layer/SSH/scp.shtmlを参照してください。

于 2009-09-15T21:13:15.517 に答える
1

これはうまくいきます:

#!/usr/bin/expect -f

spawn scp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no file1 file2 file3 user@host:/path/
expect "password:"
send "xyz123\r"
expect "*\r"
expect "\r"
interact
于 2016-01-20T01:35:10.327 に答える
1

.pem キー ファイルを使用した SCP の bash コードを次に示します。それをscript.shファイルに保存してから、「sh script.sh」で実行します

楽しみ

#!/bin/bash
#Error function
function die(){
echo "$1"
exit 1
}

Host=ec2-53-298-45-63.us-west-1.compute.amazonaws.com
User=ubuntu
#Directory at sent destination
SendDirectory=scp
#File to send at host
FileName=filetosend.txt
#Key file
Key=MyKeyFile.pem

echo "Aperture in Process...";

#The code that will send your file scp
scp -i $Key $FileName $User@$Host:$SendDirectory || \
die "@@@@@@@Houston we have problem"

echo "########Aperture Complete#########";
于 2019-04-04T03:54:56.403 に答える
-1

このコマンドscpは、従来のUNIXのように使用できますcp。だからあなたがするなら:

scp -r myDirectory/ mylogin@host:TargetDirectory

動作します

于 2011-08-17T13:13:19.207 に答える