web-dev-qa-db-ja.com

パスワードを指定せずにbashスクリプトでscpを使用するにはどうすればよいですか?

私はbashの初心者で、2台のコンピューター間でファイルを転送できるbashスクリプトを書いています。ところで、scpのより安全な代替手段はありますか?

現在、scpを使用して手動でこれを行っています。リモートサーバーは常にパスワードの入力を求めてきますが、私はそれを提供します。これを自動化したい(したがって、bashスクリプト)。ただし、パスワードをプレーンテキストで提供したくありません(または、仮にそうだとしても、Open SSLがパスワードを廃止し、証明書などを使用しているという印象を受けましたか?)。

パスワードを明示的に表示せずに、現在のプロセスを自動化する方法を誰かに説明してもらえますか?.

Ubuntu10.0.4で実行しています

3
morpheous

パスワードなしでログインするには、キーベースの認証を設定する必要があります。そこにはたくさんのチュートリアルがあります--- これは始めるのに良い場所のようです (編集:元のサイトはインターネットから落ちました、このリンクはWayBackMachineによってアーカイブされた最後のコピーへのリンクです)。

キーにパスフレーズを付けた場合(推奨)、ログイン時にパスフレーズを提供する必要がありますが、ssh-agentを使用して、パスフレーズを提供する必要がある回数を減らすことができます。

SSH/SCPを使用して無人で実行するスクリプトが必要な場合は、キーにパスフレーズを付ける必要はありませんが、この場合、他の誰も読み取れないように、そのキーファイルを安全に保つ必要があります。パスワード/パスフレーズなしであなたとしてそのサーバー上で認証するため。

7
David Spillett

scpにパスワードを入力してください

パスワードをscpの標準入力にパイプすると機能しません。

echo "password" | scp file user@Host:/dir/to/copy/to

scpは、セキュリティ上の理由から標準入力から読み取らないためです。

代わりにツールsshpassを使用してください:

Sshpassは標準ではないため、rootとしてインストールする必要がある場合があります。

sshpass -p 'mypassword' scp -r [email protected]:/home/a/moo.txt /home/b/bar.txt
0
Eric Leschinski

.pemなどのキーを使用する場合(パスワードを持っている必要がないため)、これを使用できます

これは、.pemキーファイルを使用したSCPのbashコードです。それをscript.shファイルに保存し、「shscript.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...";

scp -i $Key $FileName $User@$Host:$SendDirectory || \
die "@@@@@@@Houston we have problem"

echo "########Aperture Complete#########";
0
Chief_Arbiter