web-dev-qa-db-ja.com

パスワードを要求せずに、あるマシンから別のマシンにファイルをコピーする

現在このコマンドを使用しています。私は別のマシン(ip1)にいます

scp file.txt root@ip2:/home/praveen/test.c /home/praveen

コマンドはパスワードを要求します。

一部のシェルスクリプトで使用し、これらのスクリプトをいくつかのcrontabファイルから呼び出しています。そのため、毎回パスワードを入力することができません。パスワードの入力を無効にする方法や、どこかからパスワードを入力する別の方法があるので、もう一度入力する必要はありません。

また、ssh-keygenは使用できません。これらのスクリプトに対してのみアクションを実行する必要があるためです。 ssh-keygenを使用すると、パスワードの入力を再度求められることはありません。これは欲しくない。残りの部分は通常どおり機能するはずです。

3
user2706152

ssh-keygenとそれに続くキー交換を使用できない理由は明らかではありませんでした。これは推奨される方法だと思います。

代わりに、expectコマンド( オンラインマニュアルページ )を使用することもできます。これにより、対話型プロセスでのユーザーの介入を排除できます。名前が示すように、それはプロンプトを期待し、それに応じてそれに応じて応答します。

expectを使用したSSHの自動化 のこのソリューションを見てください。数行を引用するには:

# Look for passwod Prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"

2行目は、表示されるプロンプトを指定します。この場合、パスワードを要求します。 4行目は、パスワードをサーバーに送信します。

2
Barun

リモートサーバーで許可されている場合は、ftpを使用できます。これは、この目的で使用したシェルスクリプトのサンプルです

Host='remote.server.com'
USER='domainname/usrid'   
PASSWD='p@@ssw0rd'
cd /path/to/local/directory/containing/the/file/to/be/transferred
`ftp -n $Host <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /diretory/on/remote/server
put file2transfer.dat 
bye    
quit
END_SCRIPT`
1
ObviousChild

誰も実際の答えを投稿していないので。

はい、コメントに記載されています。公開鍵と秘密鍵のペアを作成する必要があります。

ここに2つのマニュアルがあります:

次に、ssh-agentを使用して、キーをメモリにロードできます。これにより、キーに指定したパスワードを入力する必要がなくなります。これは、現在のセッションでキーがメモリに保存されるためです。そもそもパスワードを設定する必要はありませんが、秘密鍵を持っている人がそれを使ってあなたを危険にさらす可能性があるので、そうすることをお勧めします。


もちろん、後で鍵を削除したり、リモートホストの~/.ssh/authorized_keysから公開鍵を削除したりできます。その後、pwの入力を再度求めます。

0
mike