Ssh服务知识:
Ssh包含openssh和openssl两种包。
Ssh客户端包含ssh连接工具及scp拷贝、slogin、sftp等应用程序。
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 :22和netstat -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
以上脚本前提这些范围ip的ssh地址要都打通,否则个个询问非常耗时,不如手动写几个已经打通的值。
但是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设置成setuid。chmod 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