SSH 对于我这个半路出家的野鸡运维来说,几乎是最常用的工具。
但随着时间的积累,手上维护的机器越来越多,以往的 SSH 使用习惯逐渐吃力。
我需要一些简单的办法来帮我更好地偷懒使用 SSH。
配置 SSH config
最早用上的,肯定还是 SSH config 了。
在 ~/.ssh
目录下建立一个新的文件 config
,然后在里面写入机器的配置就可以了,比如这样:
1 2 3 4 5 6
| Host ifrit HostName a.b.c.d Port 22 User root IdentityFile ~/.ssh/id_rsa
|
保存后,我以后连这台机器只需要键入 ssh ifrit
就可以直接连上了,不需要去记各个机器的 IP、端口,十分方便。
另外在配置文件的最后加入这么一段:
这样一般用 root 用户 SSH 登录没有写在配置里的机器,可以直接 ssh your_server
,省去了输入 username@
的事。
分发 SSH config
作为一个运维,手上有多台终端设备,这不难理解吧。
但是每次 SSH config 更新后,所有的设备都需要更新。
不论是手动修改各自的 config 文件,还是将文件拷到各自设备里,都相对繁琐。
一旦哪次忘记,就会出现配置之间信息脱节,给我带来麻烦。
考虑到我管理的设备都只能通过公私钥免密登录,config 文件除了我的设备 IP、用户名及端口外,再也没有其他有用的信息,决定将 config 使用 GitHub 来进行分发。
当然为了保险起见,还是建立了一个私有仓库。
这样每次有更新后,同步到 Repo 中,然后其他设备再 Pull 下载替换到相应位置即可。
顺手写了个脚本,每次运行脚本即可达成目的。
1 2 3 4 5 6
| #!/bin/sh
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) cd $SHELL_FOLDER git pull cp ./config ~/.ssh/config
|
再进一步偷懒
虽然 SSH config 文件能帮我省了很多事,但是维护的机器也有常用和不常用之分。
偶尔会出现冷门的机器忘记了 config 文件里设置的 Host 是啥,还要手动打开 config 文件看。
这就一点也不偷懒了。
于是为了以后更好偷懒,我使用搜索引擎在互联网上翻箱倒柜,写了个脚本。
脚本界面
脚本也很简单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #!/bin/bash
RED="\033[31m" GREEN="\033[32m" YELLOW="\033[33m" BLUE="\033[36m" PLAIN='\033[0m'
clear echo "#############################################################" echo -e "# ${BLUE}选择要连接的设备${PLAIN} #" echo -e " ${GREEN}1. your_server1_info${PLAIN}" echo -e " ${GREEN}2. your_server2_info${PLAIN}" echo -e " ${GREEN}3. your_server3_info${PLAIN}"
read -p " 请选择操作[0-3]:" answer case $answer in 0) exit 0 ;; 1) ssh your_server1 ;; 2) ssh your_server2 ;; 3) ssh your_server3 ;; *) colorEcho $RED " 请选择正确的操作!" exit 1 ;; esac
|
有新的直接照着添加就行了。
因为有配置过 SSH config,所以这里执行的操作全部都是在 SSH config 里配置的。
再再进一步偷懒
既然都偷懒了,那干脆偷懒到底好了。
每次找位置运行脚本也很烦,干脆加个 alias 算了。
因为我终端设备都在 Zsh,所以只需要往 ~/.zshrc
加一条 alias,这样每次初始化 Zsh 时就会加上这条 alias。
修改下分发 SSH config 的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #!/bin/sh
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd) cd $SHELL_FOLDER git pull cp ./config ~/.ssh/config
cd ~ FIND_ZSH_FILE="./.zshrc" FIND_BASH_FILE="./.bashrc" FIND_STR1="sshconfig.sh" FIND_STR2="sshchoice.sh" if [ ! -f $FIND_ZSH_FILE ]; then exit 1 elif [ `grep -c "$FIND_STR1" $FIND_ZSH_FILE` -eq '0' ];then echo "alias sshconfig='$SHELL_FOLDER/sshconfig.sh'" >> ./.zshrc fi if [ ! -f $FIND_ZSH_FILE ]; then exit 1 elif [ `grep -c "$FIND_STR2" $FIND_ZSH_FILE` -eq '0' ];then echo "alias ssc='$SHELL_FOLDER/sshchoice.sh'" >> ./.zshrc fi if [ `grep -c "$FIND_STR1" $FIND_BASH_FILE` -eq '0' ];then echo "alias sshconfig='$SHELL_FOLDER/sshconfig.sh'" >> ./.bashrc fi if [ `grep -c "$FIND_STR2" $FIND_BASH_FILE` -eq '0' ];then echo "alias ssc='$SHELL_FOLDER/sshchoice.sh'" >> ./.bashrc fi
|
首次运行时会检查 Zsh 及 Bash 的配置文件里是否有对应的 alias,没有则添加,有则不管。
然后重新初始化一下对应的 Shell,或者直接退出再进,即可生效了。
键入 sshconfig
即可更新 SSH config 文件,键入 ssc
即可查看、选择要连接的设备了。
结语
其实设备的管理,现在市场上有很多专门的工具,很全面,也很方便。
但是出于对命令行及终端的喜爱,我还是更喜欢这种古早的方式。