mirror of
https://github.com/nikdoof/dotfiles.git
synced 2026-01-30 10:58:14 +00:00
[shell-common] Update AWS commands
This commit is contained in:
@@ -87,31 +87,24 @@ function awslogin() {
|
|||||||
return 2
|
return 2
|
||||||
fi
|
fi
|
||||||
echo "AWS login successful. Credentials exported."
|
echo "AWS login successful. Credentials exported."
|
||||||
export AWS_PROFILE_ACTIVE="$profile"
|
export AWS_PROFILE="$profile"
|
||||||
if [[ -n "$profile" ]]; then
|
|
||||||
export AWS_PROFILE_DISPLAY="[aws: $profile]"
|
|
||||||
else
|
|
||||||
export AWS_PROFILE_DISPLAY=""
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Clear AWS credentials from environment
|
||||||
function awslogout() {
|
function awslogout() {
|
||||||
unset AWS_PROFILE_ACTIVE
|
aws sso logout --profile "${AWS_PROFILE:-default}" 2> /dev/null
|
||||||
unset AWS_ACCESS_KEY_ID
|
unset AWS_PROFILE AWS_PROFILE_ACTIVE AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_CREDENTIAL_EXPIRATION
|
||||||
unset AWS_SECRET_ACCESS_KEY
|
|
||||||
unset AWS_SESSION_TOKEN
|
|
||||||
unset AWS_CREDENTIAL_EXPIRATION
|
|
||||||
export AWS_PROFILE_DISPLAY=""
|
|
||||||
echo "AWS profile and credentials cleared."
|
echo "AWS profile and credentials cleared."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check if AWS credentials have expired and clear the env variables if so
|
||||||
function _aws_creds_expiration_check() {
|
function _aws_creds_expiration_check() {
|
||||||
if [[ -n "$AWS_CREDENTIAL_EXPIRATION" ]]; then
|
if [[ -n "$AWS_CREDENTIAL_EXPIRATION" ]]; then
|
||||||
local expiration_epoch
|
local expiration_epoch
|
||||||
local current_epoch
|
local current_epoch
|
||||||
|
|
||||||
# Convert expiration time to epoch (handles ISO 8601 format)
|
# Convert expiration time to epoch (handles ISO 8601 format)
|
||||||
if command -v gdate &> /dev/null; then
|
if [[ -x $(command -v gdate) ]]; then
|
||||||
# macOS with GNU coreutils installed
|
# macOS with GNU coreutils installed
|
||||||
expiration_epoch=$(gdate -d "$AWS_CREDENTIAL_EXPIRATION" +%s 2>/dev/null)
|
expiration_epoch=$(gdate -d "$AWS_CREDENTIAL_EXPIRATION" +%s 2>/dev/null)
|
||||||
current_epoch=$(gdate +%s)
|
current_epoch=$(gdate +%s)
|
||||||
@@ -130,119 +123,14 @@ function _aws_creds_expiration_check() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# easy access to SSH
|
# Hook the expiration check to each prompt display
|
||||||
function awsssh() {
|
if [[ $(command add-zsh-hook 2>/dev/null) ]]; then
|
||||||
local profile=""
|
# Zsh
|
||||||
local region=""
|
if ! [[ -n "$PERIOD" ]]; then
|
||||||
local username="ansible"
|
export PERIOD=300
|
||||||
local search=""
|
|
||||||
|
|
||||||
# Parse arguments
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
--profile)
|
|
||||||
profile="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--region)
|
|
||||||
region="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
search="$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z "$search" ]]; then
|
|
||||||
echo "Usage: awsssh [--profile prof] [--region reg] [user@]search-term"
|
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
|
add-zsh-hook periodic _aws_creds_expiration_check
|
||||||
# Extract username if provided as user@search
|
else
|
||||||
if [[ "$search" == *@* ]]; then
|
# Bash
|
||||||
username="${search%@*}"
|
PROMPT_COMMAND="_aws_creds_expiration_check; $PROMPT_COMMAND"
|
||||||
search="${search#*@}"
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# Build AWS CLI options
|
|
||||||
local aws_opts=()
|
|
||||||
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
|
||||||
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
|
||||||
|
|
||||||
# Get matching instances
|
|
||||||
local instances
|
|
||||||
instances=$(aws ec2 describe-instances \
|
|
||||||
--filters "Name=tag:Name,Values=*$search*" \
|
|
||||||
--query 'Reservations[].Instances[].{
|
|
||||||
Name: Tags[?Key==`Name`].Value | [0],
|
|
||||||
IP: PublicIpAddress,
|
|
||||||
InstanceId: InstanceId
|
|
||||||
}' \
|
|
||||||
--output json \
|
|
||||||
"${aws_opts[@]}")
|
|
||||||
|
|
||||||
if [[ $? -ne 0 || -z "$instances" || "$instances" == "[]" ]]; then
|
|
||||||
echo "Failed to retrieve instances or no match found."
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Select instance using fzf
|
|
||||||
local selection
|
|
||||||
selection=$(echo "$instances" | jq -r '.[] | "\(.Name): \(.IP // "no-ip") (\(.InstanceId))"' |
|
|
||||||
fzf -1 -0 --header "Select an instance")
|
|
||||||
|
|
||||||
if [[ -z "$selection" ]]; then
|
|
||||||
echo "No valid instance selected."
|
|
||||||
return 3
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract IP and InstanceId from selection
|
|
||||||
local ip instance_id
|
|
||||||
ip=$(echo "$selection" | sed -E 's/.*: (.*) \(.*/\1/')
|
|
||||||
instance_id=$(echo "$selection" | sed -E 's/.*\((i-[a-z0-9]+)\).*/\1/')
|
|
||||||
|
|
||||||
if [[ "$ip" != "no-ip" ]]; then
|
|
||||||
echo "Connecting to $username@$ip via SSH..."
|
|
||||||
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "${username}@${ip}"
|
|
||||||
else
|
|
||||||
echo "No public IP found. Falling back to AWS Session Manager..."
|
|
||||||
aws ssm start-session --target "$instance_id" "${aws_opts[@]}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function instances() {
|
|
||||||
local profile=""
|
|
||||||
local region=""
|
|
||||||
|
|
||||||
# Parse optional arguments
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
--profile)
|
|
||||||
profile="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--region)
|
|
||||||
region="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Unknown option: $1"
|
|
||||||
echo "Usage: list_ec2_instances [--profile prof] [--region region]"
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Build AWS CLI options
|
|
||||||
local aws_opts=()
|
|
||||||
[[ -n "$profile" ]] && aws_opts+=(--profile "$profile")
|
|
||||||
[[ -n "$region" ]] && aws_opts+=(--region "$region")
|
|
||||||
|
|
||||||
# Query EC2 for names and instance IDs
|
|
||||||
aws ec2 describe-instances \
|
|
||||||
--query 'Reservations[].Instances[].{Name: Tags[?Key==`Name`].Value | [0], InstanceId: InstanceId}' \
|
|
||||||
--output table \
|
|
||||||
"${aws_opts[@]}"
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user