Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added ssh command automation #491

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
250 changes: 250 additions & 0 deletions tabs/utils/ssh.sh
Original file line number Diff line number Diff line change
@@ -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
4 changes: 4 additions & 0 deletions tabs/utils/tab_data.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading