SSH配置:

1、在10.0.0.6机器创建SSH Key,生成公钥和私钥,执行:ssh-****** -t rsa -C "[email protected]" -f "root-06"

10.0.0.6公钥拷贝到远程机器10.0.0.4,scp ~/.ssh/root-06.pub  [email protected]:~/.ssh/root-06.pub

2、在远程机器10.0.0.4上将10.0.0.6机器的公钥加入authorized_keys

执行:cat root-06.pub >> authorized_keys,第一次创建authorized_keys,一定要执行chmod 600 authorized_keys

3、注意执行ssh-******,默认生成的是id_rsa,如果加上参数-f指定**的文件名,则需要配置config文件,否则老是提示用密码登录,是未找到公钥文件,困扰了我一天半时间,id_rsa不需要加入配置到config中,好像默认就认这个。

config配置样例:

    Host 10.0.0.4

    User root

    Port 22

    Hostname 10.0.0.4

    IdentityFile ~/.ssh/root-06

4、在目标机器上打开RSA认证,即:

 1.RSAAuthentication yes     

 2.PubkeyAuthentication yes     

 3.AuthorizedKeysFile  .ssh/authorized_keys

以上配置完了,如果不能ssh,执行service sshd restart重试下

5、禁用用户的shell登陆

 出于安全考虑,不允许用户登录shell,这可以通过编辑/etc/passwd文件完成。例如,禁用git用户,找到类似下面的一行:

 git:x:1001:1001:,,,:/home/git:/bin/bash  

最后一个冒号后改为:

 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell  

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

1、SSH:建立连接过程:客户端像服务端发送公钥,服务器收到后,寻找公钥,和客户端发过来的比较,如果一致,服务器用公钥加密“质询”(challenge),发给客户端,客户端用私钥解密质询后,再发给服务端校验。这种不需要在网络上传输口令,防止中间人***(因为他没有你的私匙)。耗时需要10秒左右

从编译依赖上看:openssh依赖于openssl,没有openssl的话openssh就编译不过去,也运行不了。

2、SSL协议:握手阶段用非对称加密(公钥)商定传输过程使用的对称加密算法和**

握手过程明细:客户端向服务器发送第一个随机数、服务器向客户端发送第二个随机数和证书,客户端验证服务器的证书,并用证书的公钥加密第二个随机数,客户端生成第三个随机数,将一、二、三随机数作为对称加密的秘钥,服务端收到公钥加密后的第二个随机数和第三个随机数,用私钥解密第二个随机数,并比较是否成功,同样将一、二、三随机数作为对称加密的秘钥,并执行一个加密串,由客户端解密,握手过程完成。

3、数字签名:私钥加密,公钥验签


发送方:

1、用哈希函数将报文明文生成报文摘要

2、将摘要用私钥加密,生成数字签名

3、将明文和数字签名一起发送

接收方:

1、用哈希函数将报文明文生成报文摘要

2、用公钥将数字签名解密,获取摘要

3、比较1和2步骤的摘要

注意,数字签名只能验证数据的完整性和防假冒,数据本身是否加密不属于数字签名的控制范围


4、数字证书:由权威CA,来统一发放包含:主机机构名称、公钥、CA的数字签名(CA用自己的私钥加密主机的公钥),防止公钥被冒充。

将证书放到服务端,当客户端访问服务端时,服务端就会把这个证书安装到客户端上。客户端用CA提供的CA自己的公钥来解密这个证书。

(当然这个CA是浏览器预装时嵌入的可信的CA,如果不是预装时嵌入的CA,此时就没有CA的公钥,就解不了,就会弹出告警。)解得开就说明这个证书是某个CA认证过了的,是可信的,解开后就会得到数据,而这个数据就是服务端的公钥,此时用这个公钥与服务端进行数据传输。

5、HTTPS

SSH、SSL、HTTPS 摘要