Skip to content

Commit 3dbe13e

Browse files
authored
Merge pull request #1 from EstebanMonge/main
add support for key files
2 parents f633023 + 72b7328 commit 3dbe13e

File tree

2 files changed

+58
-10
lines changed

2 files changed

+58
-10
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ sudo cp ssh-manager.sh /usr/local/bin/ssh-manager
9595
- Ubuntu Server 22.04 LTS
9696
- Ubuntu 22.04 LTS
9797
- Ubuntu Server 20.04 LTS
98+
- Debian 12
9899

99100
## License
100101
This script is licensed under the MIT License.

ssh-manager.sh

+57-10
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,44 @@ fi
164164

165165
}
166166

167+
addNewServerKeyFile(){
168+
169+
170+
read -p "Enter the path to the key file or leave blank if not used: " keyfile
171+
172+
if ! [ -z "$keyfile" ]
173+
then
174+
#check if the key file exists
175+
if ! [ -f "$keyfile" ]
176+
then
177+
printf "%s${warning}File does not exist.${reset}\n"
178+
addNewServerKeyFile
179+
fi
180+
fi
181+
}
182+
183+
editServerKeyFile(){
184+
185+
printf "Current key file is %s \n " "$keyfile"
186+
read -p "Enter the path to the key file or leave blank to use current key file: " newKeyFile
187+
188+
if [ -z "$newKeyFile" ]
189+
then
190+
keyfile=${keyfile//\//\\/}
191+
else
192+
#check if the key file exists
193+
if ! [ -f "$newKeyFile" ]
194+
then
195+
printf "%s${warning}File does not exist.${reset}\n"
196+
editServerKeyFile
197+
else
198+
keyfile=${newKeyFile//\//\\/}
199+
fi
200+
fi
201+
202+
}
203+
204+
167205
createNewSSHCredentials(){
168206

169207
printf "%s${info}===========================${reset}\n"
@@ -174,9 +212,10 @@ fi
174212
addNewServerIp
175213
addNewServerPort
176214
addNewServerUser
215+
addNewServerKeyFile
177216

178217

179-
echo "$name,$ip,$port,$user" >> "$cfg_file_name"
218+
echo "$name,$ip,$port,$user,$keyfile" >> "$cfg_file_name"
180219

181220
echo -e "${success}SSH Connection added successfully${reset}"
182221
read -p "Do you want to connect to the added SSH connection now? (y/n) " selection
@@ -196,8 +235,8 @@ fi
196235
echo -e "${info} Saved SSH Connections ${reset}"
197236
printf "%s${info}===========================${reset}\n"
198237
#Now to use awk to list the servers in a nice format 1 , 2 , 3 etc
199-
printf "%s${info}# Name IP/Host \tPort Username${reset}\n"
200-
awk -F, '{print NR " " $1 " " $2 " " $3 " " $4}' "$cfg_file_name" | column -t # -t is used to align the columns, using awk is always awkward .... but it works
238+
printf "%s${info}# Name IP/Host \tPort Username\tKey File${reset}\n"
239+
awk -F, '{print NR " " $1 " " $2 " " $3 " " $4 " " $5}' "$cfg_file_name" | column -t # -t is used to align the columns, using awk is always awkward .... but it works
201240

202241
printf "%s${warning}Enter the number of the SSH connection you want to edit or enter 0 to cancel : ${reset}"
203242
read -p "" serverNumber
@@ -220,15 +259,17 @@ fi
220259
ip=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $2}' "$cfg_file_name")
221260
port=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $3}' "$cfg_file_name")
222261
user=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $4}' "$cfg_file_name")
262+
keyfile=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $5}' "$cfg_file_name")
223263

224264
editServer
225265
editServerIp
226266
editServerPort
227267
editServerUser
268+
editServerKeyFile
228269

229270
#Now to replace the selected lines info with the updated info to the file
230271

231-
sed -i "${serverNumber}s/.*/$name,$ip,$port,$user/" "$cfg_file_name"
272+
sed -i "${serverNumber}s/.*/$name,$ip,$port,$user,$keyfile/" "$cfg_file_name"
232273
printf "%s${success}SSH Connection has been edited${reset}\n"
233274
menu
234275

@@ -243,8 +284,8 @@ fi
243284
echo -e "${info} Saved SSH Connections ${reset}"
244285
printf "%s${info}===========================${reset}\n"
245286
#Now to use awk to list the servers in a nice format 1 , 2 , 3 etc in a table format starting with the header but starting the numbering at from the second line
246-
printf "%s${info}# Name IP/Host Port Username${reset}\n"
247-
awk -F, '{print NR " " $1 " " $2 " " $3 " " $4}' "$cfg_file_name" | column -t # -t is used to align the columns, using awk is always awkward .... but it works
287+
printf "%s${info}# Name IP/Host Port Username Key file${reset}\n"
288+
awk -F, '{print NR " " $1 " " $2 " " $3 " " $4 " " $5}' "$cfg_file_name" | column -t # -t is used to align the columns, using awk is always awkward .... but it works
248289

249290
menu
250291

@@ -261,15 +302,16 @@ fi
261302
serverIp=$ip
262303
serverPort=$port
263304
serverUser=$user
305+
serverKeyFile=$keyfile
264306
else
265307

266308
fileEmptyCheck
267309
printf "%s${info}===========================${reset}\n"
268310
echo -e "${info} Saved SSH Connections ${reset}"
269311
printf "%s${info}===========================${reset}\n"
270312
#Now to use awk to list the servers in a nice format 1 , 2 , 3 etc
271-
printf "%s${info}# Name \t IP/Host \tPort Username${reset}\n"
272-
awk -F, '{print NR " " $1 " " $2 " " $3 " " $4}' "$cfg_file_name" | column -t # -t is used to align the columns, using awk is always awkward .... but it works
313+
printf "%s${info}# Name \t IP/Host \tPort Username\tKey file${reset}\n"
314+
awk -F, '{print NR " " $1 " " $2 " " $3 " " $4 " " $5}' "$cfg_file_name" | column -t # -t is used to align the columns, using awk is always awkward .... but it works
273315

274316
printf "%s${info}Enter the number of the SSH connection you want to connect to or enter 0 to cancel : ${reset}"
275317
read -p "" serverNumber
@@ -301,14 +343,19 @@ fi
301343
serverIp=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $2}' "$cfg_file_name")
302344
serverPort=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $3}' "$cfg_file_name")
303345
serverUser=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $4}' "$cfg_file_name")
346+
serverKeyFile=$(awk -F, -v serverNumber="$serverNumber" 'NR==serverNumber {print $5}' "$cfg_file_name")
304347

305348

306349
fi
307350
#echo $serverPort
308351
#Here we go connecting to the server
309352
printf "%s${success}Connecting to ${serverName} ...${reset}\n"
310-
ssh -p "$serverPort" "$serverUser""@""$serverIp"
311-
353+
if [ -z $serverKeyFile ]
354+
then
355+
ssh -p "$serverPort" "$serverUser""@""$serverIp"
356+
else
357+
ssh -i "$serverKeyFile" -p "$serverPort" "$serverUser""@""$serverIp"
358+
fi
312359
menu
313360

314361

0 commit comments

Comments
 (0)