Ssh

在 shell 腳本中使用 SFTP

  • May 16, 2015

我編寫了一個 shell 腳本來從另一台 UNIX 伺服器獲取文件。但是文件沒有被複製。有人可以幫我做錯什麼。

sftp username@server:$path
get ubpbilp* ./
mget cust.cmp* bunc.cmp* ./
echo "Your files are copied."

或許是這樣的:

sftp username@server <<EOT
cd $path
get ubpbilp*
get cust.cmp* 
get bunc.cmp*
quit
EOT

因為 sftp 不支持mget

正如其他人所說,您需要將get命令作為輸入傳遞給sftp. 您可以使用此處的文件來完成。另外,請注意sftp沒有mget命令。

sftp "username@server:$path" <<'EOF'
get ubpbilp* ./
get cust.cmp* ./
get bunc.cmp* ./
EOF

SFTP 編寫腳本不太方便。如果伺服器允許 scp,請使用它。如果你只是想複製一些文件,那就更容易了。scp您可以在;的命令行上傳遞模式 確保引用它們,以便它們在遠端端而不是由本地 shell 擴展。不要忘記最後.指示目標是目前目錄。

scp -p \
 "username@server:$path/ubpbilp*" \
 "username@server:$path/cust.cmp*" \
 "username@server:$path/bunc.cmp*" \
 .

如果您需要做的不僅僅是複製文件,請安裝SSHFS(如果可能)。SSHFS 通過正常的文件系統機制提供對遠端文件的訪問。它在後台使用 SFTP,因此如果伺服器允許 SFTP,您可以使用 SSHFS,前提是您的電腦允許客戶端允許FUSE

mkdir server-dir
trap 'fusermount -u server-dir; rmdir server-dir' 0 HUP INT TERM
sshfs "username@server:$path" server-dir
cp -p server-dir/ubpbilp* cust.cmp* bunc.cmp* .

引用自:https://unix.stackexchange.com/questions/203641