作者:Chancel Yang, 更新:2019 Dec 05, 字数:6104, 已阅:676
相信在Windows下使用SSH有很多同学都会选择很方便的Xshell/MobaXterm等工具,一方面是一般开发人员使用的Linux服务器众多,单独SSH并不好管理也不好记忆众多的SSH服务器,另一方面是有些服务器是使用证书的,不方便登录
MobaXterm挺好用的,免费版本也已经非常良心了,但讲真的Windows下UI好看的SSH工具真的是一款都没有,这一点较之Linux众多拥有极其漂亮Terminal的发行版简直太残忍了,而Windows Terminal虽然很漂亮但要2019年夏季(不跳票)才发布到Windows商店上,稍微美化下PowerShell也可以很好看,加之现在有WSL1.0/WSL2.0加持的Windows做Linux管理甚至取代Linux虚拟机不要太方便。
扯远了,这里着重构筑一下在WSL/Linux环境下,如何方便快捷的使用的SSH Config文件来配置管理多个Linux服务器的SSH列表
SSH Config提供了一种不需要安装客户端,只利用SSH的配置文件(~/.ssh/config)达到管理和记录多个SSH连接的目的。
编辑 ~/.ssh/config 文件
vim ~/.ssh/config
# 按照如下格式输入,证书位置自指定,我是放在 ~/.ssh/identity_file/ 目录下,此处指明相对路径即可
Host company
HostName 192.168.10.1
User ycs
Port 10086
IdentityFile identity_file/company_server.key
授权文件
chmod 600 ~/.ssh/config
# 证书文件也需要授权
chmod 600 identity_file/company_server.key
测试连接
ssh company
ssh config文件的常用参数说明
需要更多参数详情可以使用 man ssh_config 来查看
此时已经配置好简单的SSH连接快捷方式,但仍然有一个问题,配置简单,记住太多Host不容易,好记性不如烂笔头,这里可以提供一个简单的Python脚本 脚本引用自 团子的小窝 - 在 Linux 下管理 SSH 连接,另外该博客提供Bash脚本,详情可以查看链接里的博客,这里仅引用Python脚本
#!/usr/bin/python
# coding=utf-8
import os
import re
ssh_config_file = '~/.ssh/config'
def parse_config():
entry_list = []
entry_name = host_name = user_name = ''
conf = os.path.expanduser(ssh_config_file)
if not os.path.exists(conf):
print 'No such file exists: "%s"!' % conf
return entry_list, 1
fp = open(conf, 'r')
for line in fp:
line = line.strip()
if not line or line.startswith('#'):
continue
if line.startswith('Host '):
if entry_name:
entry_address = '%s@%s' % (user_name, host_name)
entry_list.append((entry_name, entry_address))
entry_name = line.split()[1]
if entry_name == '*':
entry_name = ''
elif line.startswith('HostName '):
host_name = line.split()[1]
elif line.startswith('User '):
user_name = line.split()[1]
if entry_name:
entry_address = '%s@%s' % (user_name, host_name)
entry_list.append((entry_name, entry_address))
fp.close()
return entry_list, 0
def ssh_helper():
entry_id = 0
entry_list, status_code = parse_config()
if not entry_list and status_code == 1:
return
print '''
************** Hello %s, Welcome to use SSH Helper Tool **************
''' % (os.environ['USER'])
print '+-----+------------------------------+------------------------------------------+'
print '| id | name | address |'
print '+-----+------------------------------+------------------------------------------+'
for entry_id, entry in enumerate(entry_list):
entry_name, entry_addr = entry
print '| %-3d | %-28s | %-40s |' % (entry_id, entry_name, entry_addr)
print '+-----+------------------------------+------------------------------------------+'
print '''
Tips: Press a number betwwen 0 and %d to select the host to connect, or "q" \
to quit.''' % entry_id
select = ''
while select != 'q':
select = raw_input('\n# ')
if select == 'q':
break
try:
os.system('ssh %s' % entry_list[int(select)][0])
except (ValueError, IndexError):
print 'You must press a number between 0 and %d' % entry_id
if __name__ == '__main__':
ssh_helper()
保存此脚本到~/.ssh/目录下,命名为sshs.py脚本,运行脚本测试
chancel@chancel-cp:/mnt/c/Users/ycs10$ python ~/.ssh/ssh.py
************** Hello chancel, Welcome to use SSH Helper Tool **************
+-----+------------------------------+------------------------------------------+
| id | name | address |
+-----+------------------------------+------------------------------------------+
| 0 | local | root@192.168.10.21 |
| 1 | bwh | root@bwh.chancel.cn |
| 2 | chancel.cn | chancel@chancel.cn |
| 3 | company | ycs@219.136.249.4 |
+-----+------------------------------+------------------------------------------+
Tips: Press a number betwwen 0 and 3 to select the host to connect, or "q" to quit.
#
每次输入Python ~/.ssh/sshs.py?这可一点都不酷
Linux有别名设置的办法,如果还不知道Alias别名命令,可以搜索引擎查看一下,此处不赘述
设置别名(别名可自定义)
alias sshs = "python ~/.ssh/sshs.py"
使用 sshs 进行测试
chancel@chancel-cp:/mnt/c/Users/ycs10$ sshs
************** Hello chancel, Welcome to use SSH Helper Tool **************
+-----+------------------------------+------------------------------------------+
| id | name | address |
+-----+------------------------------+------------------------------------------+
| 0 | local | root@192.168.10.21 |
| 1 | bwh | root@bwh.chancel.cn |
| 2 | chancel.cn | chancel@chancel.cn |
| 3 | company | ycs@219.136.249.4 |
+-----+------------------------------+------------------------------------------+
Tips: Press a number betwwen 0 and 3 to select the host to connect, or "q" to quit.
#
让别名在用户登录时永久生效
vim ~/.bashrc
# 在文件最末尾增加
alias sshs = "python ~/.ssh/sshs.py"
团子的小窝 - 在 Linux 下管理 SSH 连接 Yunfeng's Simple Blog - SSH config使用教程和总结