Jalankan perintah dalam koneksi sftp melalui skrip

13

Ini adalah pertanyaan yang sangat mendasar. Saya cukup baru untuk bash dan tidak tahu bagaimana melakukan ini. Googling sayangnya tidak membuat saya ke mana pun.

Tujuan saya adalah untuk terhubung dengan sftp ke server, mengunggah file, dan kemudian memutuskan sambungan.

Saya memiliki skrip berikut:

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

masalahnya adalah, skrip ini akan membuat koneksi sftp dan kemudian tidak melakukan apa-apa. Setelah saya secara manual mengetikkan keluar dalam koneksi itu mencoba untuk mengeksekusi perintah put tetapi karena sesi sftp telah ditutup itu hanya mengatakan put: perintah tidak ditemukan.

Bagaimana saya bisa membuat ini berfungsi dengan baik?

Terima kasih

kalenpw
sumber

Jawaban:

15

Anda dapat mengubah skrip Anda untuk memberikan perintah dalam dokumen di sini, misalnya,

#!/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

The <<penanda diikuti dengan nama ( EOF) memberitahu script untuk lulus baris berikut sampai nama ditemukan pada awal baris (dengan sendirinya).

Thomas Dickey
sumber
Luar biasa itu melakukan apa yang saya butuhkan. Saya harus membaca di sini dokumen. Terima kasih atas jawaban cepatnya, saya akan menerimanya dalam 8 menit.
kalenpw
Tidak masalah (saya mencari duplikat tetapi hanya menemukan satu ditutup sebagai "tidak jelas").
Thomas Dickey
Apakah Anda yakin server tidak akan tersedak komentar shell-script?
alk
Juga pendekatan ini tergantung pada jenis shell.
alk
@alk script bekerja dengan dan tanpa komentar
kalenpw
5

Anda mungkin lebih suka menggunakan scpdaripada sftp. scpberperilaku seperti cpperintah biasa , tetapi file dapat di-remote:

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

Ini menyalin file di komputer lokal Anda ke direktori di mesin jarak jauh tanpa harus menggunakan antarmuka perintah ftp-style sekolah-tua.

Layanan ssh,, scpdan sftplayanan biasanya tersedia jika ada di antara mereka; program daemon yang sama menyediakan semuanya secara bersamaan. Pada prinsipnya administrator server dapat memilih untuk menonaktifkan salah satu dari mereka, tetapi dalam praktiknya itu cukup langka.

db48x
sumber
Tidak tahu tentang scp sebelumnya terlihat sangat berguna. Dan Anda benar scpsudah tersedia di komputer saya
kalenpw
4

Anda juga dapat menggunakan -bopsi sftpuntuk menunjukkan file yang berisi perintah untuk sftp.

Misalnya, Anda bisa meletakkan semua perintah Anda di file 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

dan jalankan sftpsebagai:

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

Atau Anda dapat meneruskan perintah melalui STDIN juga jika Anda tidak ingin menggunakan file.

Dari man sftp:

-b batchfile

Mode batch membaca serangkaian perintah dari batchfile input bukan stdin. Karena tidak ada interaksi pengguna, harus digunakan bersama dengan otentikasi non-interaktif. Kumpulan '-' dapat digunakan untuk menunjukkan input standar. sftp akan dibatalkan jika salah satu dari perintah berikut gagal: get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, dan lmkdir. Pemutusan kesalahan dapat ditekan pada perintah demi perintah dengan pra-memperbaiki perintah dengan karakter '-' (misalnya, -rm / tmp / bla *).

heemayl
sumber
2

Pilihan lain adalah menggunakan curl :

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