zoukankan      html  css  js  c++  java
  • ssh服务

    一、openssh简介

    1、ssh(secure shell protocol)基于tcp协议下的22端口, 安全的远程登录

    2、两种方式的用户登录认证:

    基于password  基于DH算法做密钥交换
    基于key  基于RSA或DSA实现身份认证

    3、openssh基于C/S结构,Client: ssh, scp, sftp,slogin,xshell, putty, securecrt, sshsecureshellclient;Serve:sshd

    4、客户端配置文件:/etc/ssh/ssh_config;服务端配置文件:/etc/ssh/sshd_config

    5、客户端的使用格式

    ssh [user@]host [COMMAND]
    ssh [-l user] host [COMMAND]

    -p port:远程服务器监听的端口
    -b:指定连接的源IP(客户端有多个ip地址,指定使用哪个ip去连接)
    -v:调试模式(可用于排错)
    -C:压缩方式
    -X: 支持x11转发
    -Y:支持信任x11转发
    ForwardX11Trusted yes
    -t: 强制伪tty分配(跳板机)
    ssh -t remoteserver1 ssh remoteserver2

    6、允许实现对远程系统经验证地加密安全访问,当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接。

    7、 基于用户和口令的登录验证方式的连接过程

    1)、 客户端发起ssh请求,服务器会把自己的公钥发送给用户
    2 )、用户会根据服务器发来的公钥对密码进行加密
    3 )、加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

    8、基于密钥的登录方式

    1)、首先在客户端生成一对密钥(ssh-keygen)
    2)、 并将客户端的公钥ssh-copy-id 拷贝到服务端
    3)、 当客户端再次发送一个连接请求,包括ip、用户名
    4)、 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf
    5)、 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
    6)、 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
    7)、服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

    二、基于用户名密码的验证方式的方式登录Linux主机

    我们使用三台Linux服务器做实验

    1、使用ssh登录主机
    [root@newhostname ~]# ssh root@172.18.30.253
    root@172.18.30.253's password: 
    Last login: Tue Jan  9 09:10:07 2018 from 172.18.101.180
    
    
    2、使用指定接口登录ssh主机
    [root@newhostname ~]# ssh -b 172.18.30.253 172.18.30.254    
    root@172.18.30.254's password: 
    Last login: Tue Jan  9 08:22:24 2018 from 172.18.101.180
    指定使用172.18.30.253来连接host2
    3、通过跳板机进行连接(角色分配:cent7 172.18.30.253/16 作为客户端;cent6 172.18.30.254/16 作为跳板机,gentoo 172.18.30.100/16 作为服务器来操作)
    [root@joker-6-01 ~]# ssh -t 172.18.30.254 ssh 172.18.30.100
    root@172.18.30.254's password: 
    The authenticity of host '172.18.30.100 (172.18.30.100)' can't be established.
    RSA key fingerprint is b6:48:a5:b0:b8:ff:e1:f8:1d:99:27:86:c5:a4:c3:34.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '172.18.30.100' (RSA) to the list of known hosts.
    Password: 
    joker ~ # 
    
    通过伪终端登录,目标主机显示连接的foreign ip地址是跳板机。
    
    我们在getoo上看一下实际的socket3
    joker /etc/ssh # ss
    Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
    tcp    ESTAB      0      0      172.18.30.100:ssh                  172.18.30.254:40646        #centos6的地址          
    tcp    ESTAB      0      0      172.18.30.100:ssh                  172.18.101.180:50821                
    joker /etc/ssh #

    三、基于key验证登录Linux主机

    1、生成自己的公私钥(对客户端操作,我现在登录的是gentoo)
    joker /etc/ssh # ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:u7zpUjmNV3zx4XLTbplpZYc7tMmLvt4e2XZ3Vasspkk root@joker
    The key's randomart image is:
    +---[RSA 2048]----+
    |                 |
    |              .. |
    |           .  .++|
    |            o.++O|
    |        S+ . +oBO|
    |        =.o . BB+|
    |       ..E o +++*|
    |      ...o+ o..o+|
    |       o*+ o+oo  |
    +----[SHA256]-----+
    
    系统默认会在/root/.ssh/下生成id_rsa(私钥) 、id_rsa.pub(公钥),后续如果希望对私钥加密,则输入密码,不想加密则一路回车。
    
    2、将生成的公钥文件内容拷贝到目标server的/root/.ssh/authorized_keys这个文件中,可使用ssh-copy-id命令,避免拷贝错钥匙
    
    joker /etc/ssh # ssh-copy-id 172.18.30.253
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    The authenticity of host '172.18.30.253 (172.18.30.253)' can't be established.
    ECDSA key fingerprint is SHA256:cJiwhG4qYrpipaouDkuKIxxLnszvnEZkR8mad+EWfsU.
    Are you sure you want to continue connecting (yes/no)? yes
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@172.18.30.253's password: 
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '172.18.30.253'"
    and check to make sure that only the key(s) you wanted were added.
    
    现在我们将gentoo的公钥成功拷贝到了centos7上,现在使用ssh来连接centos7
    joker /etc/ssh # ssh 172.18.30.253
    Last login: Tue Jan  9 09:10:16 2018 from 172.18.30.253
    [root@newhostname ~]# 
    
    直接免密登录了
    
    

    使用CRT生成公私钥,如下图 ,选择Create Public Key

    一路下一步,最后选择将key保存到当前用的家目录

    秘钥生成好了,但是有一个问题,那就是CRT的秘钥文件格式和openssh的秘钥文件格式不一样,我们需要将其转化才可以使用。

    第一步:
    我们可以通过服务器端执行
    ssh-keygen -i -f Identity.pub >> ~/.ssh/authorized_keys
    将秘钥格式转换成openssh的格式,并将公钥导入到~/.ssh/authorized_keys 这个文件中(Identify.pub公钥需要实现拷贝到server端上)

    第二步:
    将生成私钥文件导入到CRT中

    将私钥文件导入

    可以使用key来访问server了

    四、ssh托管工具

    我们在生成私钥文件时,有时由于私钥的重要性,我们会在生成私钥时对其进行对称加密,那么当我们在使用key认证登录的时候,需要输入私钥的秘钥才可以,而且是每次使用每次都需要输入,对我们的工作带来了不便,这时候我们可以开启代理托管工具,来实现只输入一次秘钥,就可以登录,但是这个功能只能在当前终端生效,退出终端则会失效。

    命令:

    ssh-agent bash   开始代理
    ssh-add                将私钥密码加入

    使用代理之后,我们可以对一些基于ssh的自动化软件,放一些心了。

    五、openssh的优化

    修改/etc/ssh/sshd_config 文件中的选项为下面的样式

    UseDNS  no                               #将链接地址解析成域名,我们也用不到,会降低ssh的连接速度,我们改成“no”
    GSSAPIAuthentication no     #这一项认证我们用不到,且其会降低ssh的连接速度,我们改成“no”
    PermitRootLogin  yes             #允许root远程登录

    六、还有一些其他的ssh工具,如dropbear等。openssh还是比较常用的,在这里就不再讲其他的开源软件了,如果感兴趣可以自行搜索相关文档。

  • 相关阅读:
    用java的眼光看js的oop
    SpringBoot YAML文件特殊类型配置
    【框架】一种通知到多线程框架
    【网络基础】数据包生命
    【网络编程】TCPIP-小笔记集合
    【网络编程】TCPIP-8-套接字的多种选项
    【网络编程】TCPIP-7-域名与网络地址
    【网络编程】TCPIP-6-TCP的半关闭
    Web应用安全防护-WAF
    漫画 | 这样的程序员男友,让我分分钟想剖腹自尽!
  • 原文地址:https://www.cnblogs.com/momenglin/p/8486077.html
Copyright © 2011-2022 走看看