Mac原生terminal快速ssh登录服务器

前言

对于服务端工作同学ssh是最基本的生存环境。在windows环境中,大家会用的最多的终端APP就是SecureCRTputty。的确都是神器,各有优劣,此处就不多说了。

最近很多同学切换到了MAC上工作,对于终端的选择就更多了。什么XShellShellCraftSecureCRT……非常的多,这些都不在讨论范围。其实MAC原生Terminal也非常好,样子好看,兼容性强。一个大不足,无法快速登录ssh。今天LZ带你走一圈原生Terminal的SSH快速登录。

一、安装sshpass

ssh本身是无法直接输入密码参数的,必须2次手动输入。如下图

为了直接命令登录,我们需要使用sshpass。如下图

至于sshpass的安装方式,大家自己度娘,篇幅有限,就不谈了。

1
2
sshpass -p password ssh -p port user@address

至此我们已经可以一条命令登录了。

注意,第一次登录服务器的时候,sshpass会失败。请使用ssh先登录一次,把那个二次确认同意掉,以后就能直接sshpass了。

二、配置ssh config

其实Mac下ssh是可以快速登录的,除了密码,都是可以免输入。

~/.ssh/config里配置服务器信息即可,如果没找到,新建该文件。文件中配置HostHostnamePortUser,如下:

配置之后,我们的登录命令可以简化:

1
ssh t1

结合之前的sshpass,我们可以直接登录

1
sshpass -p password ssh t1

三、增加密码配置

经过前面的介绍,我们知道了ssh的配置,也知道sshpass可以快速登录。那么我们做一些小改动,使我们达到如下目的。

1
sshp t1

好了,介绍下思路。

  1. 在配置文件中增加密码(原生ssh并不能解析)
  2. 做个sshp脚本,读取配置中的密码并使用sshpass快速登录。

配置,我还是放在了~/.ssh/config

sshp如下

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
#!/bin/bash

RC_ERR_NO_HOST=11
RC_ERR_NO_PASSWORD=21
RC_SUCCESS=0

pass_path=~/.ssh/config
host=$1

# arguments
if [ -z $host ]; then
echo "ERR_NO_HOST, please input host."
exit $RC_ERR_NO_HOST
fi

#read file

pwd=`grep "^Host\s.*${host}\s*\$" -A4 $pass_path|grep -m1 Password|cut -d ' ' -f 2`
if [ -z $pwd ]; then
echo "ERR_NO_PASSWORD, please record password first. host[$host] file_path[$pass_path]"
exit $RC_ERR_NO_PASSWORD
fi

echo "sshpass -p $pwd ssh $@"
exec sshpass -p $pwd ssh $@
exit $RC_SUCCESS

后话

其实在其他App面前,这个登录方式有点烦,而且不是非常简单,都是命令登录,还要记得Host。但是这种方式有非常好的兼容性,任何支持local的终端都可以使用。LZ在平时工作中有很多的终端操作,所以临时登录下服务器也很快,不用额外打开一个APP了。