added ssh command automation (#491)

This commit is contained in:
Guru Swarupa 2024-09-19 22:46:03 +05:30 committed by GitHub
parent bcd8436200
commit 5dbb440d10
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 254 additions and 0 deletions

250
tabs/utils/ssh.sh Normal file
View File

@ -0,0 +1,250 @@
#!/bin/sh -e
. ../common-script.sh
# Check if ~/.ssh/config exists, if not, create it
if [ ! -f ~/.ssh/config ]; then
touch ~/.ssh/config
chmod 600 ~/.ssh/config
fi
# Function to show available hosts from ~/.ssh/config
show_available_hosts() {
printf "%b\n" "Available Systems:"
grep -E "^Host " ~/.ssh/config | awk '{print $2}'
printf "%b\n" "-------------------"
}
# Function to ask for host details
ask_for_host_details() {
printf "%b\n" "Enter Host Alias: "
read -r host_alias
printf "%b\n" "Enter Remote Host (hostname or IP): "
read -r host
printf "%b\n" "Enter Remote User: "
read -r user
printf "%b\n" "Host $host_alias" >> ~/.ssh/config
printf "%b\n" " HostName $host" >> ~/.ssh/config
printf "%b\n" " User $user" >> ~/.ssh/config
printf "%b\n" " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
printf "%b\n" " StrictHostKeyChecking no" >> ~/.ssh/config
printf "%b\n" " UserKnownHostsFile=/dev/null" >> ~/.ssh/config
printf "%b\n" "Host $host_alias added successfully."
}
# Function to generate SSH key if not exists
generate_ssh_key() {
if [ ! -f ~/.ssh/id_rsa ]; then
printf "%b\n" "SSH key not found, generating one..."
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "$(whoami)@$(hostname)"
else
printf "%b\n" "SSH key already exists."
fi
}
# Function to share the SSH public key with the remote host
share_ssh_key() {
printf "%b\n" "Enter the alias of the host to copy the key to: "
read -r host_alias
printf "%b\n" "Copying SSH key to $host_alias..."
ssh-copy-id "$host_alias"
printf "%b\n" "SSH key copied to $host_alias successfully."
}
# Function to disable password authentication and allow only SSH keys
#repeated twice as changes should take place when in commented state or modified state.
disable_password_auth() {
printf "%b\n" "Disabling SSH password authentication and enabling key-only login..."
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n"
ssh $host_alias "
$ESCALATION_TOOL -S sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S sed -i 's/^#PubkeyAuthentication no/PubkeyAuthentication yes/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S sed -i 's/^PubkeyAuthentication no/PubkeyAuthentication yes/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S systemctl restart sshd
"
printf "%b\n" "PasswordAuthentication set to no and PubkeyAuthentication set to yes."
}
enable_password_auth() {
printf "%b\n" "Disabling SSH password authentication and enabling key-only login..."
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "\n"
ssh $host_alias "
$ESCALATION_TOOL -S sed -i 's/^#PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication no/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S sed -i 's/^PubkeyAuthentication yes/PubkeyAuthentication no/' /etc/ssh/sshd_config &&
$ESCALATION_TOOL -S systemctl restart sshd
"
printf "%b\n" "PasswordAuthentication set to yes and PubkeyAuthentication set to no."
}
# Function to check if password authentication is disabled
check_password_auth() {
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
ssh $host_alias "grep '^PasswordAuthentication' /etc/ssh/sshd_config"
}
# Function to run a command on a remote server
run_remote_command() {
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the command to run: "
read -r remote_command
ssh $host_alias "$remote_command"
}
# Function to copy a file to a remote server
copy_file_to_remote() {
printf "%b\n" "Enter the local file path: "
read -r local_file
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the remote destination path: "
read -r remote_path
scp $local_file $host_alias:$remote_path
}
# Function to copy a directory to a remote server
copy_directory_to_remote() {
printf "%b\n" "Enter the local directory path: "
read -r local_dir
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the remote destination path: "
read -r remote_path
scp -r $local_dir $host_alias:$remote_path
}
# Function to move a file to a remote server (copy and delete local)
move_file_to_remote() {
printf "%b\n" "Enter the local file path: "
read -r local_file
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the remote destination path: "
read -r remote_path
scp $local_file $host_alias:$remote_path && rm $local_file
}
# Function to move a directory to a remote server (copy and delete local)
move_directory_to_remote() {
printf "%b\n" "Enter the local directory path: "
read -r local_dir
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the remote destination path: "
read -r remote_path
scp -r $local_dir $host_alias:$remote_path && rm -r $local_dir
}
# Function to remove a system from SSH configuration
remove_system() {
printf "%b\n" "Enter the alias of the host to remove: "
read -r host_alias
sed -i "/^Host $host_alias/,+3d" ~/.ssh/config
printf "%b\n" "Removed $host_alias from SSH configuration."
}
# Function to view SSH configuration
view_ssh_config() {
printf "%b\n" "Enter the alias of the host to view (or press Enter to view all): "
read -r host_alias
if [ -z "$host_alias" ]; then
cat ~/.ssh/config
else
grep -A 3 "^Host $host_alias" ~/.ssh/config
fi
}
# Function to backup files from remote host
backup_files() {
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the files or directories to backup on remote host: "
read -r remote_files
printf "%b\n" "Enter the local backup directory path: "
read -r local_backup_dir
scp -r $host_alias:$remote_files $local_backup_dir
}
# Function to sync directories with remote host
sync_directories() {
printf "%b\n" "Enter the local directory path: "
read -r local_dir
printf "%b\n" "Enter the alias of the host: "
read -r host_alias
printf "%b\n" "Enter the remote directory path: "
read -r remote_dir
rsync -avz $local_dir $host_alias:$remote_dir
}
# Function to check SSH key authentication status
check_ssh_key_authentication() {
printf "%b\n""Enter the alias of the host: "
read -r host_alias
ssh $host_alias "grep '^PubkeyAuthentication' /etc/ssh/sshd_config"
}
# Function to show options for the user
show_menu() {
printf "%b\n" "Select an SSH operation:"
printf "%b\n" "1. Add a new system"
printf "%b\n" "2. Connect to a system"
printf "%b\n" "3. Generate SSH key"
printf "%b\n" "4. Share SSH key with remote host"
printf "%b\n" "5. Disable password authentication on remote host"
printf "%b\n" "6. Enable password authentication on remote host"
printf "%b\n" "7. Check password authentication on remote host"
printf "%b\n" "8. Check SSH key authentication status"
printf "%b\n" "9. Run a command on remote host"
printf "%b\n" "10. Copy a file to remote host"
printf "%b\n" "11. Copy a directory to remote host"
printf "%b\n" "12. Move a file to remote host (copy and delete local)"
printf "%b\n" "13. Move a directory to remote host (copy and delete local)"
printf "%b\n" "14. Remove a system from SSH configuration"
printf "%b\n" "15. View SSH configuration"
printf "%b\n" "16. Backup files from remote host"
printf "%b\n" "17. Sync directories with remote host"
printf "%b\n" "18. Exit"
printf "%b\n" "Enter your choice: "
}
# Function to execute the selected SSH operation
main() {
while true; do
show_menu
read choice
case $choice in
1) ask_for_host_details ;;
2) show_available_hosts && printf "%b\n" "Enter the alias of the host to connect to: " && read -r host_alias; ssh $host_alias ;;
3) generate_ssh_key ;;
4) share_ssh_key ;;
5) disable_password_auth ;;
6) enable_password_auth ;;
7) check_password_auth ;;
8) check_ssh_key_authentication ;;
9) run_remote_command ;;
10) copy_file_to_remote ;;
11) copy_directory_to_remote ;;
12) move_file_to_remote ;;
13) move_directory_to_remote ;;
14) remove_system ;;
15) view_ssh_config ;;
16) backup_files ;;
17) sync_directories ;;
18) exit ;;
*) printf "%b\n" "Invalid choice. Please try again." ;;
esac
done
}
checkEnv
checkEscalationTool
main

View File

@ -29,6 +29,10 @@ name = "Service Manager"
description = "This utility is designed to manage services in your system"
script = "service-control.sh"
[[data]]
name = "SSH Commands"
script = "ssh.sh"
[[data]]
name = "Auto Login"
script = "auto-login.sh"