且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ssh服务及批量分发自动化管理

更新时间:2022-09-21 23:00:36

Ssh服务知识:

Ssh包含opensshopenssl两种包。

Ssh客户端包含ssh连接工具及scp拷贝、sloginsftp等应用程序。

Less /etc/ssh/sshd_config这是查看服务端配置,sshd是服务端,ssh是客户端

~/.ssh/known_hosts当客户端ssh服务端后会在本地的这个位置放一个名为known_hosts的公钥。

这个文件里可能有多个密钥,因为可能连了多个服务器。


两种连接方式:

Ssh -p22 x.x.x.x     -p22是默认可以忽略,那如果修改了端口号就要加上

Ssh -p22 用户@x.x.x.x

两种安全验证方式:一是基于口令,二是基于密钥(只需要用户名和密钥文件就可以了)。

Lsof -i :22netstat -anptu |grep 22

出于安全考虑,ssh在服务端会修改一些常用参数如下:

Port xxxx  修改默认端口号

PermitRootLogin no 禁止root登陆

PermitEmptyPasswords no  禁止空密码登陆

UseDNS no  不适用DNS

GAASPIAuthentication no 客户端登陆慢的调优参数


Nmap x.x.x.x -p1-65535 扫描命令,扫描端口1-65535的哪些端口开启了

Ssh root@x.x.x.x /sbin/ifconfig可以不连过去而在对方机器上执行命令


scp -P52113  /root/test.txt root@192.168.44.50:/tmp 端口用P  默认22的话就不用加,推拉都可以,书写方法一样就源目标调换位置下就行。

-r是拷贝目录,-p拷贝前后保持稳健或目录的属性。

scp是全量拷贝,效率不高,后期有rsync就是增量拷贝。

 

sftp oPort=52113 root@x.x.x.x 默认连过去是用户家目录

put /data1/a.txt将自己目录文件上传到对方家目录下,当然也可以上传到任何目录,put后的目标加上目录名就行,然后get a.txt

 

批量分发自动化管理:

先创建一个密钥对,就像先买一把锁和一把钥匙,然后把锁复制多份放到不通机器上,钥匙在手上就可以对多个服务器进行开锁管理。

密钥对在任何机器上创建都行

理论上密钥对跟用户没有任何关系,也就是无论你什么人都可以拿着对的钥匙去开对应的锁,为了规范可以创建基于用户的但不要用root

密钥对有两种方法,默认rsa 通过-t添加。ssh-keygen -t dsa 然后enter键什么都不输入一路到底就行了。创建密钥对就像去买钥匙和锁一样是不需要操心的。

/home/oldboy/.ssh/id_dsa 密钥对默认存放地点

id_dsa     私钥 私钥为钥匙文件权限小 通过ls -l即可查看权限644

id_dsa.pub 公钥

然后.ssh目录权限为700   这样才能保证密钥创建成功

ssh-copy-id -i ~/.ssh/id_dsa.pub weipeng@192.168.44.40 如出现.ssh/authorized_keys即创建成功。这会会在锁端~/.ssh下变成为authorized_keys意为加个外包装,免得人发现?且权限变为600

ssh-copy-id实际上是/usr/bin/ssh-copy-id的一个shell脚本,用which ssh-copy-id

可以看,如果修改ssh端口了,可以在vi /usr/bin/ssh-copy-id下的参数。

 

企业简单批量分发应用脚本:

vi fenfa.sh

if [ $# -ne 1 ]

  then /bin/sh $0 arg1

  exit

for ((n=5;n<100;n++))

do

    scp $1 oldboy@192.168.44.$n:~

done

以上脚本前提这些范围ipssh地址要都打通,否则个个询问非常耗时,不如手动写几个已经打通的值。

 

但是ssh无密钥分发也有个问题,第一次打通的时候需要将公钥传过去 ,因为密钥还没形成这样传会要求输入密码,所以如果机器多了也是个问题,后期可用expert解决。


常用案例将/etc/hosts文件做好好批量传到所有机器实现域名解析:

1、先通过普通用户将hosts文件批量scp到所有机器的家目录,由于普通用户没有拷贝到/etc下的权限,只有传到家目录下,

2、visudo提权普通用户拥有root用户的cp命令权限,但只需要在分发的机器上切换到root然后visudo,不需要所有机器都切换到root角色,生产环境中不可能所有机器都给root权限的,但现在就有一个问题,也就是sudo本机提权后如何让所有的机器把/home/oldboy下的hosts都拷贝到/etc/下呢?此时要用到关键的远程sudo,这个远程sudo就是利用ssh的特殊参数-t,如果不用远程sudo,可以用setuid 权限提权为s,可将cp设置成setuidchmod u+s `which cp`或者chmod 4755 `which cp`

3、scp /home/oldboy/hosts weipeng@x.x.x.x:~

4、ssh -t weipeng@x.x.x.x sudo /bin/cp /home/oldboy/hosts /etc/hosts

 

IP地址:

/sbin/ifconfig eth0|sed -rn 's#^.*dr:(.*)  Bc.*$#\1#g' 执行的命令加引号或括号都可以。

让发过去带有ip地址标签的文件:scp -rp data oldboy@x.x.x.x:~/data_$(/sbin/ifconfig eth0|sed -rn 's#^.*dr:(.*)  Bc.*$#\1#g')

本文转自  流颗星  51CTO博客,原文链接:http://blog.51cto.com/liukexing/1964779