SSH连接管理 (我的第一个shell脚本)

由于 ssh 链接的服务过多,自己都记不清除 iterm profiles 中的快捷键设置的设置是哪个,于是就产生了一个想法,是不是可以写一个 shell 脚本规划和整理这些内容呢?于是就去查看shell的相关语法终于写出了自己的第一个shell脚本。

#!/usr/bin/expect -f
  set user root
  set host xxx.xxx.xxx.001
  set password xxx
  set port 22
  set timeout -1

  spawn ssh $user@$host -p $port
  expect "*assword:*"
  send "$password\r"
  interact

对于 iterm 中配置快捷键 快速连接远程服务 这一段内容想必是并不陌生的了,此处略过。

那么怎才能在只设置一个快捷键的情况下快速的选择自己想要连接的服务呢。

那么就产生了这样一个想法:只写一个shell脚本,让这个脚本动态读取某一个文件夹下所有的原来设置的那些脚本,并且在后续有其他新连接时我只需要写一个新的脚本,不需要更改其他脚本。

具体实现如下:

#!/bin/bash

green="\033[32m"
yellow="\033[33m"
end="\033[0m"
dir="[...path...]/ssh_config/"
ignore="SSHConnect.sh"
files=()

function getFiles () {
  i=1

  for item in $(ls $dir); do
    if [[ ! $ignore =~ $item ]]; then
      if [[ $1 ]]; then
        echo -e "${green} ${i})${item}${end}"
      fi

      files[$i-1]=$item
      ((i++))
    fi
  done
}

function inputSelect () {
  read -p "Please input an option: " opt

  if [[ $opt ]]; then
    if [[ $opt = "q" || $opt = "Q" ]]; then
      echo -e "${yellow} you canceled the select.${end}"
      exit
    else
      tryConnect
    fi
  else
    inputSelect
  fi
}

function tryConnect () {
  i=${#files[@]}

  while [[ $i -gt 0 ]]; do
    if [[ $i -eq $opt ]]; then
      res=${files[$i-1]}
      break
    fi

    ((i--))
  done

  if [[ $res ]]; then
    echo -e "${green}Connecting ${res}. ${end}"
    "${dir}${files[i-1]}"
  else
    inputSelect
  fi
}

echo -e "${yellow}Please select you connect server:${end}"
getFiles 1
inputSelect



ssh_config 目录如下

ssh_config 目录

iterm 设置如下

iterm 设置

运行结果如下


运行结果

你可能感兴趣的:(SSH连接管理 (我的第一个shell脚本))