スクリプトを介してsftp接続でコマンドを実行する

スクリプトを介してsftp接続でコマンドを実行する

これは非常に基本的な質問です。私は初めてbashに触れ、それを行う方法を知りません。残念ながら、インターネット検索ではどこでも私を見つけることができませんでした。

私の目標は、sftpを使用してサーバーに接続し、ファイルをアップロードしてから切断することです。

次のスクリプトがあります。

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

問題は、このスクリプトがSFTP接続を確立しても何もしないことです。接続に手動で終了を入力すると、putコマンドを実行しようとしますが、sftpセッションが閉じられるため、put:command not findとのみ表示されます。

どうすれば正しく動作させることができますか?

ありがとう

答え1

このドキュメントのコマンドを渡すようにスクリプトを変更できます。たとえば、次のようになります。

#!/bin/bash

sftp -oPort=23 [email protected]:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

これ<<後に名前(EOF)を付けると、その名前(単独)が行の先頭に見つかるまで次の行を渡すようにスクリプトに指示します。

答え2

scp代わりに使用する方が良いかもしれませんsftpscp動作はcp通常のコマンドと非常によく似ていますが、ファイルはリモートである可能性があります。

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar [email protected]:/home/kalenpw/TestWorld/plugins

これにより、以前のFTPスタイルのコマンド・インターフェースを使用せずに、ローカル・システム上のファイルがリモート・システム上のディレクトリにコピーされます。

sshscpサービスはsftp通常利用可能です(これらのいずれかが利用可能な場合)。同じデーモンがこれらすべての機能を同時に提供します。原則として、サーバー管理者はこれらのいずれかを無効にすることを選択できますが、実際にはそのようなケースはほとんどありません。

答え3

-bオプションを使用してsftp包含を示すこともできますsftp

たとえば、すべてのコマンドをファイルに入れることができますsftp_commands.txt

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

次のように実行しますsftp

sftp -oPort=23 -b sftp_commands.txt [email protected]:/home/kalenpw/TestWorld/plugins 

あるいは、ファイルを使用したくない場合は、STDINを介してコマンドを渡すこともできます。

からman sftp

-bバッチファイル

バッチモードでは、標準入力ではなく入力バッチファイルから一連のコマンドを読み込みます。ユーザーの対話が不足しているため、非対話型認証で使用する必要があります。バッチファイル「-」を使用して標準入力を表すことができます。 get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, Symlink, lmkdir コマンドのいずれかが失敗すると、sftp は中断されます。 "-"文字を先頭に追加することで、コマンドごとのエラー終了を抑制できます(例:-rm /tmp/blah*)。

答え4

別のオプションは、次のものを使用することです。カール:

curl -u user -T file.tar sftp://example.com/home/user/

関連情報