web-dev-qa-db-ja.com

シェルスクリプトのコマンドを使用してFTPサーバーにファイルをアップロードしますか?

LinuxサーバーからFTPサーバーにファイルをアップロードしたい。 putおよびgetコマンドを使用してファイルをアップロードおよびダウンロードし、sftpコマンドを使用してFTPサーバーに接続していることを知っています。

しかし、すべてを1つのシェルスクリプトで実行したかったので、スクリプト内でsftpコマンドを使用してFTPに接続し、ファイルをアップロードする方法がわかりません。これは私が知っていることですが、1つのshスクリプト内でどのように機能するかわかりません。

sftp -v -oIdentityFile=path user@server
put localPath ftpPath

誰か助けてもらえますか?

8
Elvin

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 *)。

5
Jeff Smith

rsyncの使用を検討しましたか?

rsyncを介したファイルのアップロードは、間違いなく最も推奨される方法であり、スクリプトの作成も最も簡単です。ターゲットとソースの転送には、SSH、RSH、または独自のプロトコル( "rsync:// ...")を使用します。

rsyncがシステムにインストールされている可能性が高いです。 SSH経由でアクセスできる場合は、scp構文を使用できます。

rsync -alPvvz local_path user@Host:remote_path

OIdentが必要な場合は、 このunix.SEの質問 をお読みになることをお勧めします。


正確ではありませんがご要望どおりではありませんが、rsyncはほぼ業界標準であるため、少なくとも検討する。

1
polemon

SFTPプログラムは、sshプロトコルを使用して、ファイルへのアクセス、管理、およびリモートシステムへの転送を行います。異なるプロトコルを使用してファイルを転送します。ユーザー名とデータ転送は通信中に暗号化されます。 ftpクライアントを使用してsftpサーバーに接続したり、sftpクライアントを使用してftpのみをサポートするftpサーバーに接続したりすることはできません。

0
P4cK3tHuNt3R

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
0
Thorsten Staerk

マシンへのsftpアクセス権がある場合は、マシンへのsshアクセス権も持っている可能性があります。

Sshアクセスがある場合は、rsyncコマンドが使用可能かどうかを確認する必要があります。

rsyncには、ftpよりもいくつかの利点があります(安全な接続、変更されたファイルの部分のみをアップロードします-状況によっては非常に高速で、再帰的なミラーリング、圧縮が簡単です)。

https://en.wikipedia.org/wiki/Rsync

シェルスクリプトで簡単に使用できます。あなたがしなければならない唯一のことは、「鍵ベースの認証」を設定することです

0
Bjoern Mainz