私はbashの初心者で、2台のコンピューター間でファイルを転送できるbashスクリプトを書いています。ところで、scpのより安全な代替手段はありますか?
現在、scpを使用して手動でこれを行っています。リモートサーバーは常にパスワードの入力を求めてきますが、私はそれを提供します。これを自動化したい(したがって、bashスクリプト)。ただし、パスワードをプレーンテキストで提供したくありません(または、仮にそうだとしても、Open SSLがパスワードを廃止し、証明書などを使用しているという印象を受けましたか?)。
パスワードを明示的に表示せずに、現在のプロセスを自動化する方法を誰かに説明してもらえますか?.
Ubuntu10.0.4で実行しています
パスワードなしでログインするには、キーベースの認証を設定する必要があります。そこにはたくさんのチュートリアルがあります--- これは始めるのに良い場所のようです (編集:元のサイトはインターネットから落ちました、このリンクはWayBackMachineによってアーカイブされた最後のコピーへのリンクです)。
キーにパスフレーズを付けた場合(推奨)、ログイン時にパスフレーズを提供する必要がありますが、ssh-agentを使用して、パスフレーズを提供する必要がある回数を減らすことができます。
SSH/SCPを使用して無人で実行するスクリプトが必要な場合は、キーにパスフレーズを付ける必要はありませんが、この場合、他の誰も読み取れないように、そのキーファイルを安全に保つ必要があります。パスワード/パスフレーズなしであなたとしてそのサーバー上で認証するため。
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
.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#########";