LinuxサーバーからFTPサーバーにファイルをアップロードしたい。 put
およびget
コマンドを使用してファイルをアップロードおよびダウンロードし、sftp
コマンドを使用してFTPサーバーに接続していることを知っています。
しかし、すべてを1つのシェルスクリプトで実行したかったので、スクリプト内でsftp
コマンドを使用してFTPに接続し、ファイルをアップロードする方法がわかりません。これは私が知っていることですが、1つのshスクリプト内でどのように機能するかわかりません。
sftp -v -oIdentityFile=path user@server
put localPath ftpPath
誰か助けてもらえますか?
sftp
はシェルコマンドです。標準入力でSFTPコマンドを読み取ります。
hereドキュメント を使用して、コマンドに入力を渡すことができます。
sftp -v -oIdentityFile=path user@server <<EOF
put localPath ftpPath
EOF
Hereドキュメント内で変数を使用できます。
local_path=/path/to/local/file
remote_path=/somewhere/or/other
sftp -v -oIdentityFile=path user@server <<EOF
put $local_path $remote_path
EOF
これは、ファイルをコピーする最も簡単な方法ではありません。 SFTPを使用すると、ファイルを参照して転送できますが、1つのファイル(または再帰的にディレクトリ)を直接コピーするシェルコマンドもあります。
scp -o IdentityFile=path localPath user@server:remotePath
-b
オプションを使用して、バッチファイルを指定できます。
-b batchfile
Sftpのmanページからリッピング:
バッチモードでは、stdinの代わりに入力バッチファイルから一連のコマンドを読み取ります。ユーザーとの対話がないため、非対話型認証と組み合わせて使用する必要があります。 「-」のバッチファイルは、標準入力を示すために使用できます。 sftpは、get、put、rename、ln、rm、mkdir、chdir、ls、lchdir、chmod、chown、chgrp、lpwd、df、symlink、およびlmkdirのいずれかのコマンドが失敗すると中止されます。エラーの終了は、コマンドの先頭に「-」文字を付けることで、コマンドごとに抑制できます(たとえば、-rm/tmp/blah *)。
rsync
の使用を検討しましたか?
rsync
を介したファイルのアップロードは、間違いなく最も推奨される方法であり、スクリプトの作成も最も簡単です。ターゲットとソースの転送には、SSH、RSH、または独自のプロトコル( "rsync:// ...")を使用します。
rsync
がシステムにインストールされている可能性が高いです。 SSH経由でアクセスできる場合は、scp
構文を使用できます。
rsync -alPvvz local_path user@Host:remote_path
OIdentが必要な場合は、 このunix.SEの質問 をお読みになることをお勧めします。
正確ではありませんがご要望どおりではありませんが、rsync
はほぼ業界標準であるため、少なくとも検討する。
SFTPプログラムは、sshプロトコルを使用して、ファイルへのアクセス、管理、およびリモートシステムへの転送を行います。異なるプロトコルを使用してファイルを転送します。ユーザー名とデータ転送は通信中に暗号化されます。 ftpクライアントを使用してsftpサーバーに接続したり、sftpクライアントを使用してftpのみをサポートするftpサーバーに接続したりすることはできません。
File1を127.0.0.1にアップロードするには、
ftp -u [email protected]: file1
パスワードの入力を求められます。これを回避するには、.netrcに入力します。
cd
cat >.netrc<<EOF
machine 127.0.0.1
login user
password password
EOF
chmod 600 .netrc
マシンへのsftpアクセス権がある場合は、マシンへのsshアクセス権も持っている可能性があります。
Sshアクセスがある場合は、rsyncコマンドが使用可能かどうかを確認する必要があります。
rsyncには、ftpよりもいくつかの利点があります(安全な接続、変更されたファイルの部分のみをアップロードします-状況によっては非常に高速で、再帰的なミラーリング、圧縮が簡単です)。
https://en.wikipedia.org/wiki/Rsync
シェルスクリプトで簡単に使用できます。あなたがしなければならない唯一のことは、「鍵ベースの認証」を設定することです