Advertisement
Guest User

Untitled

a guest
Aug 16th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.25 KB | None | 0 0
  1. #!/bin/bash
  2. HOST=$1
  3. USER=${2:-root}
  4. PASSWORD=root_password
  5. SCREEN_SES_NAME=I_RUN_CODE_WITHOUT_VERIFICATION
  6. SSH_OPTS="-o PasswordAuthentication=no -o KbdInteractiveAuthentication=no -o ChallengeResponseAuthentication=no -o StrictHostKeyChecking=no"
  7.  
  8. function usage() {
  9.     echo "Usage: $0 host [user]"
  10.     exit 1
  11. }
  12.  
  13. function normal() {
  14.     ssh $SSH_OPTS -tt $USER@$HOST screen -RdS $SCREEN_SES_NAME
  15.     return 0
  16. }
  17.  
  18. function abnormal() {
  19.     key=$(cat ~/.ssh/id_rsa.pub)
  20.     expect -f - <<-EOE
  21.         log_user 0
  22.         set prompt "~]#"
  23.         spawn ssh $USER@$HOST
  24.         expect "assword:" { send "$PASSWORD\r" }
  25.         expect \$prompt { send "mkdir -p ~/.ssh/; chmod 700 ~/.ssh/; echo $key >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys\n" }
  26.         expect \$prompt { send "exit\n" }
  27.     EOE        
  28. }              
  29.  
  30. [ "$HOST" ] || usage
  31.  
  32. while :; do
  33.     skip_wait=""
  34. #cleanup known_hosts
  35.     ssh-keygen -R $HOST >& /dev/null
  36.  
  37. # probe host, copy key or run ssh depending on result
  38.     ssh $SSH_OPTS $USER@$HOST /bin/true >& /dev/null && normal || { abnormal; skip_wait=yes; }
  39.  
  40. # wait for interrupt
  41.     [ "$skip_wait" ] && continue
  42.     for ((i=1; i>=0; i--)); do
  43.         echo "$i..."
  44.         sleep 1
  45.     done
  46. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement