簡體   English   中英

帶有bash的sftp / scp文件

[英]sftp/scp files with bash

我需要將一組文件上傳到sftp帳戶。

我的第一個想法是使用php的ssh2_connect()函數,我能夠在本地正常工作。 但是,一旦我轉到開發環境,我很快就意識到這不是一個好的解決方案,因為不存在太多依賴項,安裝它們需要太多人的批准。

因此,我的下一個想法是使用bash,這是我需要幫助的地方。 我將通過cron每小時運行一次該bash腳本,因此它需要無人看管。 但是,當我運行sftp / scp時,需要輸入密碼。

sftp帳戶不允許ssh連接,因此我無法創建授權密鑰。 我也不想依賴遠程計算機上的.ssh文件夾。

任何建議,將不勝感激。

請記住,我無法安裝任何東西,因此沒有鑰匙串,sshpass或期望。 如何使用Bash腳本中的密碼運行sftp命令中找到所有其他答案 不可行,因為我無法在服務器上安裝任何東西。

最初,我嘗試使用php的ssh2_connect(),因為php創建了我需要上傳的文件。 出於這個原因,最好在我的php腳本中有這個sftp事務,但是由於它不起作用,所以我轉向了bash。

我的解決方案實際上是使用php和curl:

$ch = curl_init();

$fp = fopen($file, "r");

curl_setopt($ch, CURLOPT_URL, "sftp://USER:PASS@HOST/" . basename($file));
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));

curl_exec($ch);

curl_close($ch);

檢查lftp,它是文件傳輸中非常強大的工具。 例如:

lftp -u "$username","$password" -e "cd /desc/path; put $FILE; bye" sftp://remote.example.com

請同時檢查mput,lftp手冊中的鏡像。

BTW。 如果您使用Expect,我認為您不需要在遠程服務器上安裝任何東西。 無論如何,我使用lftp而不是在大多數類似情況下工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM