Komut dosyası aracılığıyla sftp bağlantısında komut yürütme


13

Bu çok basit bir soru, sadece bash için oldukça yeniyim ve bunu nasıl yapacağımı anlayamadım. Google'ın maalesef beni hiçbir yere götürmedi.

Amacım sftp ile bir sunucuya bağlanmak, bir dosya yüklemek ve daha sonra bağlantıyı kesmek.

Aşağıdaki komut dosyası var:

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

Sorun şu ki, bu komut dosyası bir sftp bağlantısı kuracak ve hiçbir şey yapamayacak. Bağlantıya el ile çıkış yazdığımda put komutunu çalıştırmayı dener ancak sftp oturumu kapatıldığı için put: komutu bulunamadı der.

Bunun düzgün çalışmasını nasıl sağlayabilirim?

Teşekkürler


Yanıtlar:


15

Bu belgedeki komutları iletmek için komut dosyanızı değiştirebilirsiniz, ör.

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

<<Adıyla (izledi işaretleyici EOF) adı satırın başında bulunana kadar (kendi başına) aşağıdaki satırları geçmek senaryoyu söyler.


Başar tam olarak ne ı gerek yaptı. Burada belgeleri okumak zorunda kalacağım. Hızlı cevap için teşekkürler 8 dakika içinde kabul edeceğim.
kalenpw

Sorun değil (yinelenen bir göz atın ama sadece bir "belirsiz" olarak kapalı bulundu).
Thomas Dickey

Sunucunun shell-script'in yorumlarını boğmayacağından emin misiniz?
alk

Ayrıca bu yaklaşım kabuk türüne bağlıdır.
alk

@alk script komut dosyasıyla ve yorumları olmadan çalışır
kalenpw

5

Bunun scpyerine kullanmayı tercih edebilirsiniz sftp. scpsıradan cpkomutun yaptığı gibi davranır , ancak dosyalar uzak olabilir:

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

Bu, yerel makinenizdeki dosyayı, eski okul ftp stili komut arabirimini kullanmak zorunda kalmadan uzak makinedeki bir dizine kopyalar.

ssh, scpVe sftphizmetler bunlardan herhangi eğer genellikle mevcuttur; aynı daemon programı hepsini aynı anda sağlar. Prensip olarak sunucunun yöneticisi bunlardan herhangi birini devre dışı bırakmayı seçebilir, ancak pratikte bu oldukça nadirdir.


Scp hakkında önceden bilmiyordum çok yararlı görünüyor. Ve sen haklıydın scpzaten benim makine üzerinde kullanılabilir
kalenpw

4

İçin komutlar içeren bir dosyayı belirtmek için -bseçeneğini de kullanabilirsiniz .sftpsftp

Örneğin, tüm komutlarınızı dosyaya koyabilirsiniz 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

ve şu şekilde çalıştırın sftp:

sftp -oPort=23 -b sftp_commands.txt kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins 

Veya bir dosya kullanmak istemiyorsanız komutları STDIN üzerinden de iletebilirsiniz.

Gönderen man sftp:

-b toplu dosya

Toplu iş modu, stdin yerine bir girdi toplu iş dosyasından bir dizi komut okur. Kullanıcı etkileşimi olmadığından, etkileşimli olmayan kimlik doğrulama ile birlikte kullanılmalıdır. Standart girdiyi belirtmek için '-' toplu dosyası kullanılabilir. sftp, aşağıdaki komutlardan herhangi biri başarısız olursa iptal edilir: get, put, reget, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink ve lmkdir. Hata sonlandırma komutu, komutun '-' karakteriyle önceden sabitlenmesiyle komut bazında bastırılabilir (örneğin, -rm / tmp / blah *).


2

Başka bir seçenek curl kullanmak olacaktır :

curl -u user -T file.tar sftp://example.com/home/user/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.