Skip to content

Instantly share code, notes, and snippets.

@emdnaia
Last active March 14, 2026 03:29
Show Gist options
  • Select an option

  • Save emdnaia/611ad6e25bb6f50b931efb5c35d9c21f to your computer and use it in GitHub Desktop.

Select an option

Save emdnaia/611ad6e25bb6f50b931efb5c35d9c21f to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
# vm-type — type a hardcoded password into maldev101 via send-key
# Usage: ./vm-type.sh (click into password field first)
set -euo pipefail
###############################################
# PUT YOUR PASSWORD HERE
PASSWORD='CHANGE_ME'
###############################################
VM="maldev101"
CONN="qemu:///system"
declare -A KEYMAP=(
[a]=KEY_A [b]=KEY_B [c]=KEY_C [d]=KEY_D [e]=KEY_E [f]=KEY_F [g]=KEY_G
[h]=KEY_H [i]=KEY_I [j]=KEY_J [k]=KEY_K [l]=KEY_L [m]=KEY_M [n]=KEY_N
[o]=KEY_O [p]=KEY_P [q]=KEY_Q [r]=KEY_R [s]=KEY_S [t]=KEY_T [u]=KEY_U
[v]=KEY_V [w]=KEY_W [x]=KEY_X [y]=KEY_Y [z]=KEY_Z
[0]=KEY_0 [1]=KEY_1 [2]=KEY_2 [3]=KEY_3 [4]=KEY_4
[5]=KEY_5 [6]=KEY_6 [7]=KEY_7 [8]=KEY_8 [9]=KEY_9
[' ']=KEY_SPACE [.]=KEY_DOT [-]=KEY_MINUS [=]=KEY_EQUAL
[,]=KEY_COMMA [/]=KEY_SLASH ['\']=KEY_BACKSLASH
['[']=KEY_LEFTBRACE [']']=KEY_RIGHTBRACE [';']=KEY_SEMICOLON
["'"]=KEY_APOSTROPHE ['`']=KEY_GRAVE
)
declare -A SHIFT_KEYMAP=(
['!']=KEY_1 [@]=KEY_2 ['#']=KEY_3 ['$']=KEY_4 [%]=KEY_5
[^]=KEY_6 ['&']=KEY_7 ['*']=KEY_8 ['(']=KEY_9 [')']=KEY_0
[_]=KEY_MINUS [+]=KEY_EQUAL ['{']="KEY_LEFTBRACE" ['}']="KEY_RIGHTBRACE"
[:]="KEY_SEMICOLON" ['"']="KEY_APOSTROPHE" ['<']="KEY_COMMA"
['>']="KEY_DOT" ['?']="KEY_SLASH" ['|']="KEY_BACKSLASH" ['~']="KEY_GRAVE"
)
for (( i=0; i<${#PASSWORD}; i++ )); do
c="${PASSWORD:$i:1}"
if [[ "$c" =~ [A-Z] ]]; then
lower="${c,,}"
virsh -c "$CONN" send-key "$VM" KEY_LEFTSHIFT "${KEYMAP[$lower]}"
elif [[ -n "${SHIFT_KEYMAP[$c]+x}" ]]; then
virsh -c "$CONN" send-key "$VM" KEY_LEFTSHIFT "${SHIFT_KEYMAP[$c]}"
elif [[ -n "${KEYMAP[$c]+x}" ]]; then
virsh -c "$CONN" send-key "$VM" "${KEYMAP[$c]}"
else
echo "WARNING: unmapped character '$c' skipped" >&2
fi
sleep 0.05
done
# Press Enter to submit
virsh -c "$CONN" send-key "$VM" KEY_ENTER
echo "Done — typed ${#PASSWORD} characters + Enter into $VM"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment