首页 > 编程语言 >Perl实现的命令行小工具sshfind:通过主机名称关键字搜索和筛选~/.ssh/config主机配置项

Perl实现的命令行小工具sshfind:通过主机名称关键字搜索和筛选~/.ssh/config主机配置项

时间:2022-12-28 09:22:06浏览次数:58  
标签:sshfind racknerd 主机 Perl 关键字 ssh config

作用

读取SSH客户端配置文件~/.ssh/config,根据主机名称筛选对应的主机相关配置项,适用于~/.ssh/config主机信息过多,不便于查找的情况,如本人该文件配置了500+主机;

使用方法:

  sshfind racknerd    #根据racknerd作为主机名称关键字进行搜索,模糊匹配
  sshfind racknerd 2  #根据racknerd作为关键字搜索,仅列出两个结果

sshfind.pl脚本代码:

#!/usr/bin/perl -W
#用途:命令行传递主机名称关键字搜索~/.ssh/config的主机配置项
#参数说明:
#     $1 ---  主机名称搜索关键字
#     $2 ---  要显示主机的个数限制
#Usage:
#     sshfind.pl racknerd      #查找主机名包含racknerd的主机
#     sshfind.pl racknerd 1    #查找主机名包含racknerd的主机,仅列出一个
#     sshfind.pl . 5           #查找主任意关键字主机,仅列出前5个

use strict;

my $hostName=$ARGV[0]?$ARGV[0]:"";               #要搜索的SSH主机名
my $maxCount=$ARGV[1]?$ARGV[1]:0;                #至多列出的主机格式,默认为0即不限制(列出所有匹配的主机)
my $showLine=0;                                  #SSH Config行打印标记开关
my $foundCount=0;                                #查找到的主机个数,同一关键字可能匹配到多个主机
my $sshConfigFile="$ENV{'HOME'}/.ssh/config";    #SSH配置文件路径:(~/.ssh/config)

if(! "$hostName"){
	print "缺少搜索关键字,将列出 ~/.ssh/config 全部主机!\n";
}

open(SSHCONFIG,"<$sshConfigFile") or die "$sshConfigFile 文件无法打开, $!";

while (<SSHCONFIG>) {
	if(/^[\s\t]*Host[\s\t]+.*($hostName).*/i){
		$showLine=1;
		$foundCount+=1;
		printf "\n" if $foundCount>1;
	}
	elsif(/^[\s\t]*Host[\s\t]+.*$/i){
		$showLine=0;
	}
	last if $maxCount>0 and $foundCount==$maxCount+1 and $foundCount--;
	print if $showLine==1;	
}

print "\n找到主机 $foundCount 个\n";

使用效果:

sshfind 其他版本:

Python实现的版本:
https://www.cnblogs.com/cnhack/p/17009406.html

标签:sshfind,racknerd,主机,Perl,关键字,ssh,config
From: https://www.cnblogs.com/cnhack/p/17009424.html

相关文章

  • 局域网内访问其他主机内的虚拟机环境
    1、首先选择虚拟机这里使用的是VMware,点击工具栏的【编辑】—>【虚拟网络编辑器】—>【NAT模式】—>【NAT设置】—>配置映射到主机的端口(默认端口为22)2、操作安装虚拟机的......
  • 配置https虚拟主机
    配置https虚拟主机配置httpd.conf,取消以下注释LoadModulessl_modulemodules/mod_ssl.soInclude/etc/httpd24/extra/httpd-ssl.conf[root@liuconf]#vimhttpd.conf......
  • 配置httpd虚拟主机
    配置httpd虚拟主机相同ip不同端口设置主机名[root@liu~]#vim/usr/local/apache/conf/httpd.conf...#Ifyourhostdoesn'thavearegisteredDNSname,enteri......
  • 配置https虚拟主机
    配置https步骤生成证书openssl实现私有CA参考配置httpd.conf,取消以下内容的注释  LoadModulessl_modulemodules/mod_ssl.so  Include/etc/httpd24/extra/......
  • 配置httpd虚拟主机
    环境准备编译安装httpd参考虚拟主机虚拟主机有三类:相同IP不同端口不同IP相同端口相同IP相同端口不同域名相同IP不同端口yum安装文件位置:vim/etc/httpd/co......
  • Apache 虚拟主机里的 ServerName 指令
    术语虚拟主机(Virtualhost)是指在一台机器上运行多个网站(例如company1.example.com和company2.example.com)的做法。虚拟主机可以是“基于IP”的,这意味着每个网站都有......
  • 在同一台主机启动多个FreeSWITCH实例
    本文更新于2022-04-23,使用FreeSWITCH1.10.7。假设已经在/usr/local/freeswitch安装FreeSWITCH,并在此目录启动一个实例。现需在另一个目录(笔者使用/usr/local/freeswitch2......
  • 在同一台主机启动多个FreeSWITCH实例
    本文更新于2022-04-23,使用FreeSWITCH1.10.7。假设已经在/usr/local/freeswitch安装FreeSWITCH,并在此目录启动一个实例。现需在另一个目录(笔者使用/usr/local/freeswitch2......
  • 在同一台主机启动多个FreeSWITCH实例
    本文更新于2022-04-23,使用FreeSWITCH1.10.7。假设已经在/usr/local/freeswitch安装FreeSWITCH,并在此目录启动一个实例。现需在另一个目录(笔者使用/usr/local/freeswitch2......
  • 在同一台主机启动多个FreeSWITCH实例
    本文更新于2022-04-23,使用FreeSWITCH1.10.7。假设已经在/usr/local/freeswitch安装FreeSWITCH,并在此目录启动一个实例。现需在另一个目录(笔者使用/usr/local/freeswitch2......