From 209c2167ab14e0d2d34ec16d7145a13ffa87e5ce Mon Sep 17 00:00:00 2001 From: q3aql Date: Sun, 23 Jan 2022 00:03:17 +0100 Subject: [PATCH] Add option for legacy RSA Algorithm --- src/.ks-upa.swp | Bin 0 -> 61440 bytes src/.ks-upf.swp | Bin 0 -> 53248 bytes src/.ks-upr.swp | Bin 0 -> 65536 bytes src/.ks-upv.swp | Bin 0 -> 57344 bytes src/ks-upa | 113 +++++++++++++++++++++++++++++++++++++----------- src/ks-upf | 113 +++++++++++++++++++++++++++++++++++++----------- src/ks-upr | 92 +++++++++++++++++++++++++++++++-------- src/ks-upv | 113 +++++++++++++++++++++++++++++++++++++----------- 8 files changed, 337 insertions(+), 94 deletions(-) create mode 100644 src/.ks-upa.swp create mode 100644 src/.ks-upf.swp create mode 100644 src/.ks-upr.swp create mode 100644 src/.ks-upv.swp diff --git a/src/.ks-upa.swp b/src/.ks-upa.swp new file mode 100644 index 0000000000000000000000000000000000000000..428bd37cb65dda1ca815a471d3b9e7d19d503dda GIT binary patch literal 61440 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 literal 0 HcmV?d00001 diff --git a/src/.ks-upr.swp b/src/.ks-upr.swp new file mode 100644 index 0000000000000000000000000000000000000000..d4e7260b3be6b29129e9f0193084735c3b592d06 GIT binary patch literal 65536 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

<4frtc2IX6Btfp zeZY@`?EiNWY=bRuJUsk!takvfgFZL~WFNr$;byoIa!mHpPc_w#&em3^G{4e_> zb>Dcx1go6H)*DE+I9O{|AQnN1d-h(ei!#Mb78#2Ee(sA5MPoB-p2t=|GW)*BtX!9b zZF=z`rmBhmReVo^fn?7IYAb4Lj zF4Dh*T~2~k6c?=KPk&+24Q=$RjFmEyEe>SFxMA;uRvT032A%ngJT})Oi)`v~!0kWd zW;{vEA;RA zK1rY1Juff&1Cn0W6x7Q%7Rsdwy&;UthRk%8wJ=keu`G+YOibo4pDGkf<;oT8em#3& z=3r0n`VFUT+;sXG>$aY=ZD4Twj-BVdZrAQTLwjGpZ+PUQ3og9)?C!{hIq^+rtSrv8 zJJGP-LMg{a4|*#fW!A>At^k2YK(J0#g(v8?pZFgd|9?t!Y;tGf95`2UE zKMJ1%ofeyp(G(ljPHE+Wo_6ti-wut!JV{Q|Dq9v zp`s%x&7v~%>}7I5lk_Z{L(mXKB;RIK=b*yYVRIBL5nyvH<2Yt<*l?v6BDhqI%vR#d z)UM)ix4wBd-z2x@mwbz^@FF+T{{K~U?uS71fBxyuv*`QJz?b1_sDSJN_-go9^!%^D zt+)C1CzxC~`z1!eN;SQ_N zfkJK8>&43c9$VCAaq#31|Ff!c@I~)py+vK3LzXf{@6v`1rX*gBFRb;86PvlXOFR?A z|Nn2$;g3bH7v&$fcm4Sgzr_dOD(HtEI1zL>{wAM90*M3?2_zCoB#=lTkw7AWL;{Hf z5(y*{NF?yQkU+4aU$At3a73mY*Gn~-C}F0e=%4c{m};wiGE!#nKTy~^=fu7ub8qKm t7#|ye*%3B{bw!l+$c|bZ;q-8@y_OmMxBHTqtD>F<)@Q=p^)T;z_Fr%s@#+8o literal 0 HcmV?d00001 diff --git a/src/.ks-upv.swp b/src/.ks-upv.swp new file mode 100644 index 0000000000000000000000000000000000000000..3fb17edd2792e55a447d5504eaff90daeefebbf1 GIT binary patch literal 57344 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 function check_fingerprint() { fingerprint_host=$(cat ${HOME}/.ssh/known_hosts 2> /dev/null | grep -o "${2}") + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") if [ -z "${fingerprint_host}" ] ; then # Run command for upload on Windows (Cygwin) if [ "${cygwin}" == "yes" ] ; then - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -153,11 +162,19 @@ function check_fingerprint() { fi # Run command for upload on Unix systems else - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -184,6 +201,13 @@ function sendFile() { /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -l ${3}" ${2} ${4}:${5} 2> /dev/null /usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null OUTPUT=$? + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2} ${4}:${5} 2> /dev/null + /usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + OUTPUT=$? + elif [ "${toolSelected}" == "scp-rsa" ] ; then + /usr/bin/sshpass -p ${1} /usr/bin/scp -o HostKeyAlgorithms=+ssh-rsa ${2} ${3}@${4}:${5} 2> /dev/null + OUTPUT=$? else /usr/bin/sshpass -p ${1} /usr/bin/scp ${2} ${3}@${4}:${5} 2> /dev/null OUTPUT=$? @@ -194,6 +218,13 @@ function sendFile() { rsync --progress -azL --rsh="sshpass -p ${1} ssh -l ${3}" ${2} ${4}:${5} 2> /dev/null sshpass -p ${1} ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null OUTPUT=$? + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + rsync --progress -azL --rsh="sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2} ${4}:${5} 2> /dev/null + sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + OUTPUT=$? + elif [ "${toolSelected}" == "scp-rsa" ] ; then + sshpass -p ${1} scp -o HostKeyAlgorithms=+ssh-rsa ${2} ${3}@${4}:${5} 2> /dev/null + OUTPUT=$? else sshpass -p ${1} scp ${2} ${3}@${4}:${5} 2> /dev/null OUTPUT=$? @@ -220,15 +251,28 @@ function checkChecksum() { countChecksum=0 echo -n "Checking checksum... " && sleep 4 echo "" + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") while [ ${correct} -eq 0 ] ; do if [ "${cygwin}" == "yes" ] ; then - checksumLocal=$(/usr/bin/md5sum ${2}) - checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} md5sum ${5} 2> /dev/null) - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + checksumLocal=$(/usr/bin/md5sum ${2}) + checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + else + checksumLocal=$(/usr/bin/md5sum ${2}) + checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + fi else - checksumLocal=$(md5sum ${2}) - checksumServer=$(sshpass -p ${1} ssh ${3}@${4} md5sum ${5} 2> /dev/null) - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + checksumLocal=$(md5sum ${2}) + checksumServer=$(sshpass -p ${1} ssh ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + else + checksumLocal=$(md5sum ${2}) + checksumServer=$(sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + fi fi if [ ${OUTPUT} -ne 0 ] ; then echo "Failed to get checksum for ${5}" @@ -416,11 +460,25 @@ function editConfig() { dirLocal=${DIR} echo ${dirLocal} > ${dirConfig}/ks-upload-dirlocal elif [ "${EDIT}" == "6" ] ; then - echo -n "* [Default: scp] Type upload tool (scp or rsync): " ; read TOOL + echo "" + echo "* Available options:" + echo "" + echo "- scp" + echo "- rsync" + echo "- scp-rsa (legacy RSA algorithm)" + echo "- rsync-rsa (legacy RSA algorithm)" + echo "" + echo -n "* [Default: scp] Type upload tool (scp/rsync/scp-rsa/rsync-rsa): " ; read TOOL if [ -z "${TOOL}" ] ; then upvTool="scp" + elif [ "${TOOL}" == "rsync" ] ; then + upvTool="rsync" + elif [ "${TOOL}" == "rsync-rsa" ] ; then + upvTool="rsync-rsa" + elif [ "${TOOL}" == "scp-rsa" ] ; then + upvTool="scp-rsa" else - upvTool=${TOOL} + upvTool="scp" fi echo ${upvTool} > ${dirConfig}/ks-upload-tool elif [ "${EDIT}" == "7" ] ; then @@ -504,7 +562,7 @@ function showHelp() { echo "" echo "* ks-upa (ks-tools) v${VERSION} (${M_DATE})" echo "" - echo "- Upload audio file(s) to server with rsync+ssh" + echo "- Upload audio file(s) to server with scp or rsync" echo "" echo "+ Syntax:" echo "" @@ -673,6 +731,11 @@ elif [ "${1}" == "-i" ] ; then echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" echo "" fi + if [ "${current_tool}" == "scp-rsa" ] ; then + echo "* NOTE: You are using 'scp' to upload files and no progress will be shown." + echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" + echo "" + fi while [ ${count} -le ${totalFiles} ] ; do fullNameFile=$(showFile ${count}) fullPathFile=$(showPathFile ${count}) diff --git a/src/ks-upf b/src/ks-upf index ae57d17..d7c8c0d 100755 --- a/src/ks-upf +++ b/src/ks-upf @@ -1,11 +1,11 @@ #!/bin/bash -###################################################################### -# ks-upf (ks-tools) - Upload common file(s) to server with rsync+ssh # -# Date: 22-01-2022 # -# Author: q3aql # -# Contact: q3aql@duck.com # -###################################################################### +######################################################################### +# ks-upf (ks-tools) - Upload common file(s) to server with scp or rsync # +# Date: 22-01-2022 # +# Author: q3aql # +# Contact: q3aql@duck.com # +######################################################################### VERSION="8.2" M_DATE="220122" @@ -161,14 +161,23 @@ function showPathFile() { # check_fingerprint function check_fingerprint() { fingerprint_host=$(cat ${HOME}/.ssh/known_hosts 2> /dev/null | grep -o "${2}") + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") if [ -z "${fingerprint_host}" ] ; then # Run command for upload on Windows (Cygwin) if [ "${cygwin}" == "yes" ] ; then - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -180,11 +189,19 @@ function check_fingerprint() { fi # Run command for upload on Unix systems else - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -211,6 +228,13 @@ function sendFile() { /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -l ${3}" ${2} ${4}:${5} 2> /dev/null /usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null OUTPUT=$? + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2} ${4}:${5} 2> /dev/null + /usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + OUTPUT=$? + elif [ "${toolSelected}" == "scp-rsa" ] ; then + /usr/bin/sshpass -p ${1} /usr/bin/scp -o HostKeyAlgorithms=+ssh-rsa ${2} ${3}@${4}:${5} 2> /dev/null + OUTPUT=$? else /usr/bin/sshpass -p ${1} /usr/bin/scp ${2} ${3}@${4}:${5} 2> /dev/null OUTPUT=$? @@ -221,6 +245,13 @@ function sendFile() { rsync --progress -azL --rsh="sshpass -p ${1} ssh -l ${3}" ${2} ${4}:${5} 2> /dev/null sshpass -p ${1} ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null OUTPUT=$? + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + rsync --progress -azL --rsh="sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2} ${4}:${5} 2> /dev/null + sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + OUTPUT=$? + elif [ "${toolSelected}" == "scp-rsa" ] ; then + sshpass -p ${1} scp -o HostKeyAlgorithms=+ssh-rsa ${2} ${3}@${4}:${5} 2> /dev/null + OUTPUT=$? else sshpass -p ${1} scp ${2} ${3}@${4}:${5} 2> /dev/null OUTPUT=$? @@ -247,15 +278,28 @@ function checkChecksum() { countChecksum=0 echo -n "Checking checksum... " && sleep 4 echo "" + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") while [ ${correct} -eq 0 ] ; do if [ "${cygwin}" == "yes" ] ; then - checksumLocal=$(/usr/bin/md5sum ${2}) - checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} md5sum ${5} 2> /dev/null) - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + checksumLocal=$(/usr/bin/md5sum ${2}) + checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + else + checksumLocal=$(/usr/bin/md5sum ${2}) + checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + fi else - checksumLocal=$(md5sum ${2}) - checksumServer=$(sshpass -p ${1} ssh ${3}@${4} md5sum ${5} 2> /dev/null) - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + checksumLocal=$(md5sum ${2}) + checksumServer=$(sshpass -p ${1} ssh ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + else + checksumLocal=$(md5sum ${2}) + checksumServer=$(sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + fi fi if [ ${OUTPUT} -ne 0 ] ; then echo "Failed to get checksum for ${5}" @@ -443,11 +487,25 @@ function editConfig() { dirLocal=${DIR} echo ${dirLocal} > ${dirConfig}/ks-upload-dirlocal elif [ "${EDIT}" == "6" ] ; then - echo -n "* [Default: scp] Type upload tool (scp or rsync): " ; read TOOL + echo "" + echo "* Available options:" + echo "" + echo "- scp" + echo "- rsync" + echo "- scp-rsa (legacy RSA algorithm)" + echo "- rsync-rsa (legacy RSA algorithm)" + echo "" + echo -n "* [Default: scp] Type upload tool (scp/rsync/scp-rsa/rsync-rsa): " ; read TOOL if [ -z "${TOOL}" ] ; then upvTool="scp" + elif [ "${TOOL}" == "rsync" ] ; then + upvTool="rsync" + elif [ "${TOOL}" == "rsync-rsa" ] ; then + upvTool="rsync-rsa" + elif [ "${TOOL}" == "scp-rsa" ] ; then + upvTool="scp-rsa" else - upvTool=${TOOL} + upvTool="scp" fi echo ${upvTool} > ${dirConfig}/ks-upload-tool elif [ "${EDIT}" == "7" ] ; then @@ -531,7 +589,7 @@ function showHelp() { echo "" echo "* ks-upf (ks-tools) v${VERSION} (${M_DATE})" echo "" - echo "- Upload common file(s) to server with rsync+ssh" + echo "- Upload common file(s) to server with scp or rsync" echo "" echo "+ Syntax:" echo "" @@ -700,6 +758,11 @@ elif [ "${1}" == "-i" ] ; then echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" echo "" fi + if [ "${current_tool}" == "scp-rsa" ] ; then + echo "* NOTE: You are using 'scp' to upload files and no progress will be shown." + echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" + echo "" + fi while [ ${count} -le ${totalFiles} ] ; do fullNameFile=$(showFile ${count}) fullPathFile=$(showPathFile ${count}) diff --git a/src/ks-upr b/src/ks-upr index c532ca8..fa1f5af 100755 --- a/src/ks-upr +++ b/src/ks-upr @@ -1,11 +1,11 @@ #!/bin/bash -########################################################################### -# ks-upr (ks-tools) - Upload recursively file(s) to server with rsync+ssh # -# Date: 22-01-2022 # -# Author: q3aql # -# Contact: q3aql@duck.com # -########################################################################### +############################################################################## +# ks-upr (ks-tools) - Upload recursively file(s) to server with scp or rsync # +# Date: 22-01-2022 # +# Author: q3aql # +# Contact: q3aql@duck.com # +############################################################################## VERSION="8.2" M_DATE="220122" @@ -144,14 +144,23 @@ function showFile() { # check_fingerprint function check_fingerprint() { fingerprint_host=$(cat ${HOME}/.ssh/known_hosts 2> /dev/null | grep -o "${2}") + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") if [ -z "${fingerprint_host}" ] ; then # Run command for upload on Windows (Cygwin) if [ "${cygwin}" == "yes" ] ; then - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -163,11 +172,19 @@ function check_fingerprint() { fi # Run command for upload on Unix systems else - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -191,6 +208,15 @@ function sendFile() { echo "+ Syncing folder ${2} to ${5} (${4})" /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -l ${3}" ${2}/ ${4}:${5}/ 2> /dev/null /usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + echo "" + echo "+ Syncing folder ${2} to ${5} (${4})" + /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2}/ ${4}:${5}/ 2> /dev/null + /usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + elif [ "${toolSelected}" == "scp-rsa" ] ; then + echo "" + echo "+ Sending files from ${2} to ${5} (${4})" + /usr/bin/sshpass -p ${1} /usr/bin/scp -o HostKeyAlgorithms=+ssh-rsa -r ${2}/* ${3}@${4}:${5}/ 2> /dev/null else echo "" echo "+ Sending files from ${2} to ${5} (${4})" @@ -203,6 +229,15 @@ function sendFile() { echo "+ Syncing folder ${2} to ${5} (${4})" rsync --progress -azL --rsh="sshpass -p ${1} ssh -l ${3}" ${2}/ ${4}:${5}/ 2> /dev/null sshpass -p ${1} ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + echo "" + echo "+ Syncing folder ${2} to ${5} (${4})" + rsync --progress -azL --rsh="sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2}/ ${4}:${5}/ 2> /dev/null + sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + elif [ "${toolSelected}" == "scp-rsa" ] ; then + echo "" + echo "+ Sending files from ${2} to ${5} (${4})" + sshpass -p ${1} scp -o HostKeyAlgorithms=+ssh-rsa -r ${2}/* ${3}@${4}:${5}/ 2> /dev/null else echo "" echo "+ Sending files from ${2} to ${5} (${4})" @@ -381,11 +416,25 @@ function editConfig() { dirLocal=${DIR} echo ${dirLocal} > ${dirConfig}/ks-upload-dirlocal elif [ "${EDIT}" == "6" ] ; then - echo -n "* [Default: scp] Type upload tool (scp or rsync): " ; read TOOL + echo "" + echo "* Available options:" + echo "" + echo "- scp" + echo "- rsync" + echo "- scp-rsa (legacy RSA algorithm)" + echo "- rsync-rsa (legacy RSA algorithm)" + echo "" + echo -n "* [Default: scp] Type upload tool (scp/rsync/scp-rsa/rsync-rsa): " ; read TOOL if [ -z "${TOOL}" ] ; then upvTool="scp" + elif [ "${TOOL}" == "rsync" ] ; then + upvTool="rsync" + elif [ "${TOOL}" == "rsync-rsa" ] ; then + upvTool="rsync-rsa" + elif [ "${TOOL}" == "scp-rsa" ] ; then + upvTool="scp-rsa" else - upvTool=${TOOL} + upvTool="scp" fi echo ${upvTool} > ${dirConfig}/ks-upload-tool elif [ "${EDIT}" == "7" ] ; then @@ -469,7 +518,7 @@ function showHelp() { echo "" echo "* ks-upr (ks-tools) v${VERSION} (${M_DATE})" echo "" - echo "- Upload recursively file(s) to server with rsync+ssh" + echo "- Upload recursively file(s) to server with scp or rsync" echo "" echo "+ Syntax:" echo "" @@ -632,6 +681,11 @@ elif [ "${1}" == "-i" ] ; then echo "* NOTE: You are using 'scp' to upload files and no progress will be shown." echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" fi + if [ "${current_tool}" == "scp-rsa" ] ; then + echo "" + echo "* NOTE: You are using 'scp' to upload files and no progress will be shown." + echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" + fi if [ -d ${dirLocal} ] ; then sendFile ${password} "${dirLocal}" ${user} ${server} ${dirServer} echo "" diff --git a/src/ks-upv b/src/ks-upv index ee6a7cb..95d245a 100755 --- a/src/ks-upv +++ b/src/ks-upv @@ -1,11 +1,11 @@ #!/bin/bash -###################################################################### -# ks-upv (ks-tools) - Upload videos file(s) to server with rynsc+ssh # -# Date: 22-01-2022 # -# Author: q3aql # -# Contact: q3aql@duck.com # -###################################################################### +######################################################################### +# ks-upv (ks-tools) - Upload videos file(s) to server with scp or rsync # +# Date: 22-01-2022 # +# Author: q3aql # +# Contact: q3aql@duck.com # +######################################################################### VERSION="8.2" M_DATE="220122" @@ -134,14 +134,23 @@ function showPathFile() { # check_fingerprint function check_fingerprint() { fingerprint_host=$(cat ${HOME}/.ssh/known_hosts 2> /dev/null | grep -o "${2}") + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") if [ -z "${fingerprint_host}" ] ; then # Run command for upload on Windows (Cygwin) if [ "${cygwin}" == "yes" ] ; then - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -153,11 +162,19 @@ function check_fingerprint() { fi # Run command for upload on Unix systems else - echo "* INFO: First connection to a server requires saving the fingerprint." - echo "* INFO: Only the first time you will have to enter the password." - echo "" - ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + else + echo "* INFO: First connection to a server requires saving the fingerprint." + echo "* INFO: Only the first time you will have to enter the password." + echo "" + ssh -o HostKeyAlgorithms=+ssh-rsa ${1}@${2} echo "* Connection successfuly" &> /dev/null + OUTPUT=$? + fi if [ ${OUTPUT} -ne 0 ] ; then echo "" echo "+ ERROR: There has been a failure to connect to the server." @@ -184,6 +201,13 @@ function sendFile() { /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -l ${3}" ${2} ${4}:${5} 2> /dev/null /usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null OUTPUT=$? + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + /usr/bin/rsync --progress -azL --rsh="/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2} ${4}:${5} 2> /dev/null + /usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + OUTPUT=$? + elif [ "${toolSelected}" == "scp-rsa" ] ; then + /usr/bin/sshpass -p ${1} /usr/bin/scp -o HostKeyAlgorithms=+ssh-rsa ${2} ${3}@${4}:${5} 2> /dev/null + OUTPUT=$? else /usr/bin/sshpass -p ${1} /usr/bin/scp ${2} ${3}@${4}:${5} 2> /dev/null OUTPUT=$? @@ -194,6 +218,13 @@ function sendFile() { rsync --progress -azL --rsh="sshpass -p ${1} ssh -l ${3}" ${2} ${4}:${5} 2> /dev/null sshpass -p ${1} ssh ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null OUTPUT=$? + elif [ "${toolSelected}" == "rsync-rsa" ] ; then + rsync --progress -azL --rsh="sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa -l ${3}" ${2} ${4}:${5} 2> /dev/null + sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} rm -rf ${5}/.${6}.* &> /dev/null + OUTPUT=$? + elif [ "${toolSelected}" == "scp-rsa" ] ; then + sshpass -p ${1} scp -o HostKeyAlgorithms=+ssh-rsa ${2} ${3}@${4}:${5} 2> /dev/null + OUTPUT=$? else sshpass -p ${1} scp ${2} ${3}@${4}:${5} 2> /dev/null OUTPUT=$? @@ -220,15 +251,28 @@ function checkChecksum() { countChecksum=0 echo -n "Checking checksum... " && sleep 4 echo "" + toolSelected=$(cat ${dirConfig}/ks-upload-tool | grep "rsa") while [ ${correct} -eq 0 ] ; do if [ "${cygwin}" == "yes" ] ; then - checksumLocal=$(/usr/bin/md5sum ${2}) - checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} md5sum ${5} 2> /dev/null) - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + checksumLocal=$(/usr/bin/md5sum ${2}) + checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + else + checksumLocal=$(/usr/bin/md5sum ${2}) + checksumServer=$(/usr/bin/sshpass -p ${1} /usr/bin/ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + fi else - checksumLocal=$(md5sum ${2}) - checksumServer=$(sshpass -p ${1} ssh ${3}@${4} md5sum ${5} 2> /dev/null) - OUTPUT=$? + if [ -z "${toolSelected}" ] ; then + checksumLocal=$(md5sum ${2}) + checksumServer=$(sshpass -p ${1} ssh ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + else + checksumLocal=$(md5sum ${2}) + checksumServer=$(sshpass -p ${1} ssh -o HostKeyAlgorithms=+ssh-rsa ${3}@${4} md5sum ${5} 2> /dev/null) + OUTPUT=$? + fi fi if [ ${OUTPUT} -ne 0 ] ; then echo "Failed to get checksum for ${5}" @@ -416,11 +460,25 @@ function editConfig() { dirLocal=${DIR} echo ${dirLocal} > ${dirConfig}/ks-upload-dirlocal elif [ "${EDIT}" == "6" ] ; then - echo -n "* [Default: scp] Type upload tool (scp or rsync): " ; read TOOL + echo "" + echo "* Available options:" + echo "" + echo "- scp" + echo "- rsync" + echo "- scp-rsa (legacy RSA algorithm)" + echo "- rsync-rsa (legacy RSA algorithm)" + echo "" + echo -n "* [Default: scp] Type upload tool (scp/rsync/scp-rsa/rsync-rsa): " ; read TOOL if [ -z "${TOOL}" ] ; then upvTool="scp" + elif [ "${TOOL}" == "rsync" ] ; then + upvTool="rsync" + elif [ "${TOOL}" == "rsync-rsa" ] ; then + upvTool="rsync-rsa" + elif [ "${TOOL}" == "scp-rsa" ] ; then + upvTool="scp-rsa" else - upvTool=${TOOL} + upvTool="scp" fi echo ${upvTool} > ${dirConfig}/ks-upload-tool elif [ "${EDIT}" == "7" ] ; then @@ -504,7 +562,7 @@ function showHelp() { echo "" echo "* ks-upv (ks-tools) v${VERSION} (${M_DATE})" echo "" - echo "- Upload videos file(s) to server with rynsc+ssh" + echo "- Upload videos file(s) to server with scp or rsync" echo "" echo "+ Syntax:" echo "" @@ -674,6 +732,11 @@ elif [ "${1}" == "-i" ] ; then echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" echo "" fi + if [ "${current_tool}" == "scp-rsa" ] ; then + echo "* NOTE: You are using 'scp' to upload files and no progress will be shown." + echo "* IMPORTANT: It's possible switch to 'rsync' if you wish (Command: ks-upv -e)" + echo "" + fi while [ ${count} -le ${totalFiles} ] ; do fullNameFile=$(showFile ${count}) fullPathFile=$(showPathFile ${count})