ssh的配置与原理解释

来源:互联网 发布:java 审批流程设计 编辑:程序博客网 时间:2024/04/29 18:19

基础安装

1.首先确定远程机器能上网,测试一下本地机器与远程机器能否互联,可以ping一下远程机器,当然要保证远程机器能响应icmp请求。可以通过检查在/etc/sysctl.conf文件中是否有:


net.ipv4.icmp_echo_ignore_all = 1


   这一项,如果有或者没有也ping不通的情况下将这个net.ipv4.icmp_echo_ignore_all的值设置为0重启:


sudo sysctl -p


2.测试当前机器是否能ssh上


ssh kimbo@192.168.18.112


   如果登录成功,就忽略下面的内容吧..

   如果提示:


ssh: connect to host 192.168.18.112 port 22: Connection refused


   就表明没安装或者配置上有问题.

   在远程机器上安装:


sudo apt-get install openssh-serverssh kimbo@192.168.18.112

   提示登录密码 OK.


3.ssh基础配置


sudo nano /etc/ssh/sshd_config


  注意: 是sshd_config而不是ssh_config,sshd_config是配置ssh服务器的主要配置文件而ssh_config是客户端配置文件

  示例: 几个比较常用的配置:

     1.改变常用端口号:

        将Port设置为30011: Port = 30011 

     2.PermitRootLogin //是否允许root用户登录

     重启ssh服务: 


sudo service ssh restart


4.实现无密码登录远程主机

  登录ssh主机的时候或者拷贝一些文件的收总是要你输入密码,这是件令人很讨厌的事情。

  ssh实现了公钥登录,暂且不理会这些概念,反正这样做了就不用输入密码了。

  步骤:

  1.在本地主机上运行:


 ssh-keygen

  

      一路回车,中间有个要密码的,直接为空就可以了,完了之后会在主目录下的.ssh目录下生成两个文件一个是id_rsa和id_rsa.pub

      如下提示:


The key fingerprint is:        2c:6f:52:81:7e:b1:b3:b3:ef:7d:1e:b5:d3:e9:49:59 calvin@swallowsea

      

  2.将当前id_rsa.pub文件拷贝到你远程机器上的.ssh目录下


scp -P 30022 .ssh/id_rsa.pub kimbo@192.168.18.112:.ssh/ 

  

  3.在远程机器上的.ssh目录下执行:


cat id_rsa.pub >> authorized_keys

   

  4.测试:


ssh kimbo@192.168.18.112 -p 30022

   不用输入密码了,拷贝也一样。


5.概念:

   ssh是一种采用了公钥加密的传输协议。

   公钥加密: 公钥加密算法的过程简单的描述就是,一个是公开的密码,另一个是非公开的私钥,利用公钥将数据加密,利用私钥    将加密的数据解密,反过来也可以。

   5.1 普通的登录过程

        ssh第一次登录过程:(ssh -p port username@host)

        1,首先,用户想远程机器发送登录请求。

        2,远程机器将公钥发送给请求登录的用户。

        3,用户机器提示是否要接受远程主机的公钥,接受后,用户机器利用公钥加密自己的密码,发送给远程机器。

        4,远程机器利用私钥解密密码,验证通过后登录

        5,验证通过后本地机器就会将公钥存到.ssh/known_hosts文件里。

        6,下次登录就不在提示是否接受远程主机的公钥了

这个过程中会有有个过程很是奇怪,为什么要提示是否接受公钥呢?

当第一次登录的时候是否会提示这样的:


The authenticity of host '[192.168.18.112]:30022 ([192.168.18.112]:30022)' can't be established.ECDSA key fingerprint  is a8:07:59:5c:00:08:9b:2e:86:fd:94:d5:04:fd:c6:76.Are you sure you want to continue connecting (yes/no)?
 

   提示的意思大致是:esda(一种签名认证算法)公钥的指纹是XXXX,你是否要继续?(公钥的指纹指的是对公钥进行md5处理,这样就比较短了)证明一下这个公钥的确出自于要登录的那台机器:

   打开远程机器上的/etc/ssh目录,找到一个ssh_host_ecdsa_key.pub文件,这个文件就是公钥文件。

执行:


ssh-keygen -lf ssh_host_ecdsa_key.pub
 

果然:


256 a8:07:59:5c:00:08:9b:2e:86:fd:94:d5:04:fd:c6:76  root@kimbo-VirtualBox (ECDSA)
 

   其实这样的步骤目的就是为了要你确定当前的主机是否是你要连接的主机。因为根据公钥计算出来的公钥指纹是一定的,所以你可以根据公钥指纹来确定当前的主机是否是你要登录的机器。

这里有一个比较著名的攻击:中间人攻击,就是用伪造的公钥发给用户,用户输入密码,然后就可以套取密码了,所以这个提示的目的就是根据提供的公钥指纹来确定是否是你要登录的机器。

5.2 不用密码的登录过程

   上面介绍的不用密码的登录过程是这样的..

   1.用户机器请求登录,远程机器将发送一段随机的字符串

   2.用户用本地的私钥(id_rsa文件)加密后,再发回到主机

   3.远程主机用公钥(suthorized_keys文件)进行解密成功后就允许直接登录


原创粉丝点击