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 kalenpw@184.155.136.254:/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


Jawaban:


15

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

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/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).


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 kalenpw@184.155.136.254:/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.


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 kalenpw@184.155.136.254:/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 *).


2

Pilihan lain adalah menggunakan curl :

curl -u user -T file.tar sftp://example.com/home/user/
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.