zoukankan      html  css  js  c++  java
  • RSA加密算法和SSH远程连接服务器

    服务器端与客户端的密钥系统不一样,称为非对称式密钥系统
    RSA算法的基础是模运算x mod n,事实上:
    [(a mod n) + (b mod n)] mod n = (a+b) mod n
    [(a mod n) - (b mod n)] mod n = (a-b) mod n
    [(a mod n) * (b mod n)] mod n = (a*b) mod n
    因此有(a mod n)^d mod n = a^d mod n
    报文/信息(message)其实仅仅是一个比特模式(bit pattern),每个比特模式可以表示为一个唯一的整数,加密一个报文就等价于加密一个数
    为了加密m,我们可以加密对应的数,得到一个新的数(即密文)
     
    RAS生成公钥、私钥对的过程: 
    1. 选择2个1024bits的大质数p和q
    2. 计算n = pq,z = (p-1)(q-1)
    3. 选择e (满足e<n),使e与z 之间没有公因子,即e, z互质
    4. 选择d使得ed-1刚好可以被z整除(即: ed mod z = 1 )
    5. 得到公钥: (n,e);私钥:(n,d)
    加密报文m (m<n)时,计算c = m^e mod n
    解密密文c时,计算m = c^d mod n
    有m = (m^e mod n)^d mod n = m^ed mod n = (m^d mod n)^e mod n 
    利用公钥加密,可以利用私钥解密
    利用私钥加密,可以利用公钥解密
    RSA的安全性建立在“大数分解和素性检测”这个数论难题的基础上。将两个大素数相乘在计算上容易实现,而将该乘积分解的计算量相当大
     
    已知公钥求解私钥,相当于在不知道两个因子p和q的前提下,找出n的因子,很难
    但其计算速度很慢,因此往往利用公钥加密建立安全连接,然后建立第二个密钥-对称会话密钥,用于加密数据

    远程连接服务器主要有三种:
    文字接口明码:telnet,rsh等为主
    文字接口密码:SSH(Secure SHELL protocol)为主
    图形接口:Xdmcp,VNCRDP
     
    SSH有两种加密算法,默认RSA加密算法
    开启sshd服务:
    [root@localhost ~]# rm /etc/ssh/ssh_host*
    [root@localhost ~]# service sshd restart
    Redirecting to /bin/systemctl restart  sshd.service
    [root@localhost ~]# date
    Tue Jul 11 21:46:05 EDT 2017
    [root@localhost ~]# ll /etc/ssh/ssh_host*
    -rw-r-----. 1 root ssh_keys  227 Jul 11 21:45 /etc/ssh/ssh_host_ecdsa_key
    -rw-r--r--. 1 root root      162 Jul 11 21:45 /etc/ssh/ssh_host_ecdsa_key.pub
    -rw-r-----. 1 root ssh_keys  387 Jul 11 21:45 /etc/ssh/ssh_host_ed25519_key
    -rw-r--r--. 1 root root       82 Jul 11 21:45 /etc/ssh/ssh_host_ed25519_key.pub
    -rw-r-----. 1 root ssh_keys 1675 Jul 11 21:45 /etc/ssh/ssh_host_rsa_key
    -rw-r--r--. 1 root root      382 Jul 11 21:45 /etc/ssh/ssh_host_rsa_key.pub
    [root@localhost ~]# netstat -tlnp | grep ssh
    Proto Recv-Q Send-Q Local Address    Foreign Address      State       PID/Program name   
    tcp         0              0         0.0.0.0:22              0.0.0.0:*               LISTEN          16016/sshd         
    tcp6       0              0               :::22                      :::*                     LISTEN          16016/sshd
    ssh 账号@主机ip
    不写账号会默认以本地端账号登入远程
    ssh -f student@127.0.0.1find / &> ~/find1.log
    -f  不登入远程主机只发送一个指令过去
     
    服务器公钥记录文件 ~/.ssh/known_hosts
    若接收到的公钥尚未记录,则询问用户是否记录
    若接收到的公钥已经记录,则进行对比,不同会发出警告
     
    scp XXX.tar root@ipaddress:/root/(目标)
    scp student@127.0.0.1:/etc/bashrc /tmp
    -r 递归地复制文件夹
    [root@www ~]# sftp student@localhost
    sftp> lls /etc/hosts
    /etc/hosts
    sftp> put /etc/hosts
    Uploading /etc/hosts to /home/student/hosts
    sftp> ls -a
    .     ..     .bash_history     .bash_logout
    .bash_profile     .bashrc     .mozilla     hosts
    sftt> lcd /tmp
    sftp> lpwd
    Local working directory: /tmp
    sftp> get  .bashrc
    Fetching /home/student/.bashrc to .bashrc
    /home/student/.bashrc 100% 124 0.1KB/s 00:00
    sftp> lls -a
    .    .font-unix   keyring-rNd7qX     .X11-unix
    ..   .gdm_socket   lost+found   scim-panel-socket:0-root
    .bashrc    .ICE-unix mapping-root     .X0-lock
    sftp> exit 
    制作不用密码立刻可以登入的ssh用户
    [root@localhost ~]# ssh-keygen -t rsa/dsa             
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    产生了两个文件~/.ssh/id_rsa(-rw-------)和~/.ssh/id_rsa.pub
    将公钥内容放置到服务器端的~/.ssh/authorized_keys(-rw-r--r--)下
    ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host可以将key直接写入远程机器的authorized_keys中
    之后通过SSH登录远程机器不再需要密码
    [root@VM_6_187_centos ~]# ldd $(which sshd) | grep libwrap
        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f0430674000)
    [root@VM_6_187_centos ~]# ldd $(which httpd) | grep libwrap
    SSH有支持tcp wrappers所提供的libwrap.so这个函式库档案,可以使用/etc/host.{allow,deny}进行类似防火墙的抵抗机制,http则不可以
    控制远程访问设置:
    [root@www ~]# vim /etc/hosts.allow
    sshd: 127.0.0.1 192.168.1.0/255.255.255.0     192.168.100.0/255.255.255.0
    [root@www ~]# vim /etc/hosts.deny
    sshd : ALL
    这两个文件的格式都是一样的<service(program_name)> : <IP, domain, hostname> : <action>
    hosts.allow的action默认allow,hosts.deny的action默认deny 
  • 相关阅读:
    jQuery插件学习(一)
    全屏滚动
    Js与Jq 获取浏览器和对象值的方法
    HTML5 布局标签
    CSS3笔记(一)
    CSS的一些思考(一)
    js学习(一)
    CSS Hacks 总结
    CSS样式总结
    HTML标签总结
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/9238075.html
Copyright © 2011-2022 走看看