change remote from SSH/SCP to SFTP

This commit is contained in:
zawz 2021-04-16 16:50:58 +02:00
parent 5148e66a94
commit dcfbbf9ab5
6 changed files with 55 additions and 25 deletions

View file

@ -3,7 +3,7 @@ var_exclude = ZPASS_.* XDG_.* REMOTE_.* DISPLAY CONFIGFILE TMPDIR
fct_exclude = _tty_on
zpass: src/*
lxsh -o zpass -m --minify-quotes --minify-var --exclude-var "$(var_exclude)" --minify-fct --exclude-fct "$(fct_exclude)" --remove-unused src/main.sh
lxsh -o zpass -M --exclude-var "$(var_exclude)" --exclude-fct "$(fct_exclude)" src/main.sh
debug: src/*
lxsh -o zpass src/main.sh

View file

@ -7,7 +7,7 @@ unpack() {
(
set -e
cd "$1"
decrypt "$2" | tar -xf - 2>/dev/null
decrypt "$2" | tar -xf -
)
}
@ -28,13 +28,10 @@ pack()
) || return $?
if [ -n "$ZPASS_REMOTE_ADDR" ]
then
[ -z "$ZPASS_PATH" ] && datapath="~/.local/share/zpass"
if [ -n "$ZPASS_SSH_ID" ]
then scp -i "$ZPASS_SSH_ID" "$1/$archive" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $?
else scp "$1/$archive" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $?
fi
ret=0
sftp_upload "$1/$archive" "$datapath/$ZPASS_FILE$ZPASS_EXTENSION" || ret=$?
rm -f "$1/$archive" 2>/dev/null
return 0
return $ret
else
mv -f "$1/$archive" "$file"
fi
@ -89,12 +86,11 @@ create() {
return 1
}
[ -n "$ZPASS_REMOTE_ADDR" ] && {
ret=0
ssh "$ZPASS_REMOTE_ADDR" "mkdir -p '$datapath'"
if [ -n "$ZPASS_SSH_ID" ]
then scp -i "$ZPASS_SSH_ID" "$file" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $?
else scp "$file" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" >/dev/null || return $?
fi
sftp_upload "$file" "$datapath/$ZPASS_FILE$ZPASS_EXTENSION" || ret=$?
rm -rf "$file" 2>/dev/null
return $ret
}
fi
return 0

View file

@ -8,8 +8,9 @@ encrypt() {
# $1 = key , $2 = keyfile to write
decrypt_with_key()
{
gpg --pinentry-mode loopback --batch --passphrase "$1" -o - -d "$file" 2>/dev/null && ret=$? && [ -n "$2" ] && echo "$1" > "$2"
return $ret
gpg --pinentry-mode loopback --batch --passphrase "$1" -o - -d "$file" 2>/dev/null || return $?
[ -n "$2" ] && echo "$1" > "$2"
return 0
}
# $1 = keyfile to write
@ -18,11 +19,7 @@ decrypt()
# get remote file
[ -n "$ZPASS_REMOTE_ADDR" ] && {
file="$TMPDIR/zpass_$(filehash)$ZPASS_EXTENSION"
[ -z "$ZPASS_PATH" ] && datapath="~/.local/share/zpass"
if [ -n "$ZPASS_SSH_ID" ]
then scp -i "$ZPASS_SSH_ID" "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" "$file" >/dev/null || return $?
else scp "$ZPASS_REMOTE_ADDR:$datapath/$ZPASS_FILE$ZPASS_EXTENSION" "$file" >/dev/null || return $?
fi
sftp_download "$datapath/$ZPASS_FILE$ZPASS_EXTENSION" "$file" >/dev/null || return $?
}
cat "$file" >/dev/null 2>&1 || { echo "File doesn't exist. Use 'zpass create' to create the file" >&2 && return 1; } # no file

View file

@ -1,13 +1,26 @@
#!/bin/sh
list_files() {
_cmd_ "cd '$datapath' 2>/dev/null && find . -maxdepth 1 -type f -regex '.*$ZPASS_EXTENSION\$'" | sed "s/$(escape_chars "$ZPASS_EXTENSION")\$//g; s|.*/||g"
if [ -n "$ZPASS_REMOTE_ADDR" ] ; then
echo "$cmd" | sftp_cmd -b- << EOF
cd "$datapath"
ls -1
EOF
else
(
cd "$datapath"
ls -1
)
fi | grep "$(escape_chars "$ZPASS_EXTENSION")$"
}
remove_files()
{
for N
do
_cmd_ "rm '$datapath/$N$ZPASS_EXTENSION'" || exit $?
done
if [ -n "$ZPASS_REMOTE_ADDR" ] ; then
echo "$cmd" | sftp_cmd -b- << EOF
rm "$datapath/$N$ZPASS_EXTENSION"
EOF
else
rm "$datapath/$N$ZPASS_EXTENSION"
fi
}

View file

@ -27,7 +27,7 @@ case $arg in
n|new) sanitize_paths "$@" && new "$@" ;;
g|get) sanitize_paths "$@" && get "$@" ;;
x|copy) sanitize_paths "$1" && copy "$1" ;;
l|ls|list) sanitize_paths "$@" && __NOPACK=y archive_exec ls -Apw1 -- "$@" ;;
l|ls|list) sanitize_paths "$@" && __NOPACK=y archive_exec ls -Ap1 -- "$@" ;;
r|rm) sanitize_paths "$@" && archive_exec rm -rf -- "$@" ;;
m|mv) sanitize_paths "$@" && move "$@" ;;
e|exec) archive_exec "$@" ;;

24
src/remote.sh Normal file
View file

@ -0,0 +1,24 @@
# $@ = args
sftp_cmd() {
[ -n "$ZPASS_REMOTE_ADDR" ] || return $?
if [ -n "$ZPASS_SSH_ID" ] ; then
sftp -i "$ZPASS_SSH_ID" "$@" "$ZPASS_REMOTE_ADDR"
else
sftp "$@" "$ZPASS_REMOTE_ADDR"
fi | grep -v "^sftp>"
return 0
}
# $1 = local file , $2 = remote file
sftp_upload() {
sftp_cmd -b- >/dev/null << E
put "$1" "$2"
E
}
# $1 = remote file , $2 = local file
sftp_download() {
sftp_cmd -b- >/dev/null << E
get "$1" "$2"
E
}