web-dev-qa-db-ja.com

UNIXでsftpを使用してファイルを転送する方法

コンピューターのディレクトリからリモートサーバーのディレクトリに.pngファイルを転送したい。

ファイルと転送モードを保護するには、SFTPを使用する必要があります。そして、私はすでに通常モードでファイルをコピーするためのUNIXスクリプト(.ksh)ファイルを持っています。 SFTPモードで転送を実装するにはどうすればよいですか?

5
Robin clave

。kshスクリプトで使用しているコマンドの代わりに、sftpを使用します。参考のために sftp man を参照してください。

scpセキュアコピー- scp man も確認することをお勧めします。

編集

sftpは主にインタラクティブな操作用であり、接続するホストを指定する必要があります。

sftp example.com

ユーザー名とパスワードの入力を求められ、インタラクティブセッションが開始されます。

スクリプトで使用できますが、scpの方がはるかに使いやすいです。

scp /path/to/localfile user@Host:/path/to/dest

パスワードの入力を求められます。

編集2

scpsftpはどちらも基礎となるプロトコルとしてsshを使用します。 this および this を参照してください。

スクリプトから実行するようにそれらを設定する最良の方法は、キーを使用してパスワードなしの認証を設定することです。 this および this を参照してください。私はこれを私のサーバーで広く使用しています。キーを設定した後、実行できます

scp -i private-key-file /path/to/local/file user@Host:/path/to/remote

sftp -oIdentityFile=private-key-file -b batch-file user@Host

パスワードで認証したい場合は、expectパッケージを試してみてください。最も単純なスクリプトは次のようになります。

#!/usr/bin/expect
spawn sftp -b batch-file user@Host
expect "*?assword:*"
send "pasword\n"
interact

詳細については、 thisthis および this を参照してください。

12

1行でsftpを介してコマンドを送信します。

ファイルを作成してmy_batch_fileとして保存します:

cd /root
get blah.txt
bye

これを実行してバッチファイルを実行します:

eric@dev /home/el $ sftp [email protected] < my_batch_file
Connecting to 10.30.25.15...
Password:
sftp> cd /root
sftp> get blah.txt
Fetching /root/blah.txt to blah.txt
sftp> bye

ファイルが転送されます

これにより、blah.txtがリモートコンピューターからローカルコンピューターに移動しました。

パスワードを指定したくない場合は、次のようにします:

Bashスクリプトのパスワードを使用してsftpコマンドを実行する方法は?

または、ハッキーで安全でない方法で実行したい場合は、bashを使用して期待してください:

#!/bin/bash
expect -c "
spawn sftp username@your_Host
expect \"Password\"
send \"your_password_here\r\"
interact "

プロンプトが受け取るものと一致するように、expectをインストールし、「パスワード」の文言を小文字の「p」に変更する必要がある場合があります。ここでの問題は、パスワードがファイルとコマンド履歴にプレーンテキストで公開されることです。これは、そもそもパスワードを持つという目的をほぼ無効にします。

1
Eric Leschinski