ssh介绍:
ssh是secre shell protocol的简写,由IETF的网咯工作小组(Network Working Group)所制定;它通过对联机数据包加密的技术来进行数据传递,因此,数据很安全。SSH是专为远程登入会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中中的 信息泄露问题。
默认情况下,SSH本身提供两个服务功能:一个是类似telnet的远程联机使用shell的服务,即俗称的SSH;另一个是类似FTP服务的sftp-server,可以提供更安全的FTP服务。
两种安全级别:
第一种级别(基于口令的安全验证)
只要知道自己账号和口令,就可以登入到远程主机。所有传输的数据都会被加密。
第二种级别(基于密钥的安全验证)
需要依靠密钥,也就是你必须为自己创建一对密钥,并把公用密钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端SSH软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,现在服务器上你的用户主目录下找到你的公用密钥,然后把它和你发送过来的公用密钥进行比较。如果两个密钥一致,服务器就用公用密钥加密“质询”(challenge)并把它发送该客户端软件。
分发数据(一把钥匙开多把锁)
为各服务器添加用户
[root@openion ~]# useradd openion #添加用户
[root@openion ~]# echo "open" | passwd --stdin openion #设置密码
对分发服务器进行设置
由于服务器为中心分发服务器,所以选择在a端建立Public key(锁)与Private key(钥匙)
[root@openion ~]# su – openion
[openion@openion ~]$ ssh-keygen -t dsa
# ssh-keygen 是生成密钥的工具,-t参数指定密钥类型,这里是建立dsa类型密钥。
# 也可以执行ssh-keygen -t rsa来建立rsa类型的密钥。
# RSA与DSA加密算法的区别:
# RSA是一种加密算法(ps:RSA也可以进行数字签名的),它的简写的是由Ron Rivest、 Adi Shamir 和Leonard Adleman
#这三个人名字的第一个字母连接起来就是RSA
#DSA就是数字签名算法的英文全称的简写,即Digital Signature Algorithm,RSA既可以进行加密也可以进行数字签名实现认证,而DSA只能用于数字签名从而实现认证。
Generating public/private dsa key pair.
Enter file in which to save the key (/home/openion/.ssh/id_dsa): #默认回车即可
Created directory '/home/openion/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/openion/.ssh/id_dsa. #这是Private key的路径
Your public key has been saved in /home/openion/.ssh/id_dsa.pub. #这是Public key的路径
The key fingerprint is:
c2:db:37:df:f7:c4:b2:d8:e8:09:bc:ed:d7:e9:51:80 openion@openion
分发公钥
把公钥从分发服务器拷贝到其他的服务器各一份。
[openion@openion ~]$ cd .ssh/
[openion@openion .ssh]$ ssh-copy-id -i id_dsa.pub openion@192.168.111.130
# ssh-copy-id为系统自带的shell脚本,可以用来分发公钥。
The authenticity of host '192.168.111.130 (192.168.111.130)' can't be established.
RSA key fingerprint is 93:f3:b4:e5:8c:1c:ac:c9:d2:05:18:81:57:eb:7d:2c.
Are you sure you want to continue connecting (yes/no)? yes #输入yes在本地添加ssh公钥信息。该信息默认会被添加到本地~/.ssh/known_host文件中。
Warning: Permanently added '192.168.111.130' (RSA) to the list of known hosts.
openion@192.168.111.130's password:
Now try logging into the machine, with "ssh 'openion@192.168.111.130'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
添加到别的服务器同上
向服务器分发命令:
[openion@openion ~]$ ssh openion@192.168.111.130 /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:D8:38:28
inet addr:192.168.111.130 Bcast:192.168.111.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed8:3828/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2809228 errors:0 dropped:0 overruns:0 frame:0
TX packets:689583 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3839476092 (3.5 GiB) TX bytes:323030789 (308.0 MiB)
分发文件:
[openion@openion ~]$ touch openion1 openion2 openion3 openion4 openion5
[openion@openion ~]$ ls
openion1 openion2 openion3 openion4 openion5
[openion@openion ~]$ scp -P22 -r ~/* openion@192.168.111.130:~
openion1 100% 0 0.0KB/s 00:00
openion2 100% 0 0.0KB/s 00:00
openion3 100% 0 0.0KB/s 00:00
openion4 100% 0 0.0KB/s 00:00
openion5 100% 0 0.0KB/s 00:00
##############################################################
[openion@openion ~]$ rsync -avz -P -e 'ssh -p 22' ~/* openion@192.168.111.130:~
building file list ...
5 files to consider
openion1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=4/5)
openion2
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=3/5)
openion3
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=2/5)
openion4
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=1/5)
openion5
0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=0/5)
sent 310 bytes received 130 bytes 880.00 bytes/sec
total size is 0 speedup is 0.00
对服务器推送需要root权限时,解决方法
方法一:
把openion用户配置成sudo权限用户,然后就可以实现通过sudo功能实现普通用户推送只有root才能处理的问题。
具体方式:
1、执行visudo命令开启Defaults requiretty参数。
2、使用ssh如下命令(ssh -t hostname sudo <cmd>)
方法二:
可以把echo、cp、scp命令修改为setuid位在推送文件时就可以使用以上命令(不推荐使用此命令)
chmod 4755 /bin/cp
方法三:
可以配置root用户的免登入认证,但这又会有一定的安全问题(虽然可以防火墙封堵SSH端口),而且通常情况下服务器为禁止root用户登入的,因此此方式虽然简单但是安全性低不推荐使用。