精华内容
下载资源
问答
  • 关闭openssh服务
    千次阅读
    2018-09-17 19:59:03

    Linux高级篇–SSH服务

    一、 SSH

    • ssh: secure shell, protocol, 22/tcp, 安全的远程登录
    • 具体的软件实现:
        OpenSSH: ssh协议的开源实现,CentOS默认安装
        dropbear:另一个开源实现
    • SSH协议版本
        v1: 基于CRC-32做MAC,不安全;man-in-middle
        v2:双方主机协议选择安全的MAC方式
        基于DH算法做密钥交换,基于RSA或DSA实现身份认证
    • 两种方式的用户登录认证:
        基于password
        基于key

    知识扩展:
    远程执行命令,无需登录到目标主机,适用于查看目标主机的简单信息

    [root@centos7-1 ~]#ssh yuan@192.168.32.128 'hostname'
    yuan@192.168.32.128's password: 
    centos6
    
    

    openssh软件组成

    • OpenSSH介绍
    • 相关包:
        openssh
        openssh-clients
        openssh-server
    • 工具:
        基于C/S结构
        Client: ssh, scp, sftp,slogin
         Windows客户端:
         xshell, putty, securecrt, sshsecureshellclient
        Server: sshd

    ssh客户端

    • 客户端组件:
    • ssh, 配置文件:/etc/ssh/ssh_config
        Host PATTERN
          StrictHostKeyChecking no 首次登录不显示检查提示
    • 格式:ssh [user@]host [COMMAND]
        ssh [-l user] host [COMMAND]
    • 常见选项
        -p port:远程服务器监听的端口
        -b:指定连接的源IP
        -v:调试模式
        -C:压缩方式
        -X:支持x11转发
        -t:强制伪tty分配
          ssh -t remoteserver1 ssh remoteserver2
    • 允许实现对远程系统经验证地加密安全访问
    • 当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
    -X 支持x11转发
    即nm-connection-editor  图形界面
    ssh -X  192.168.32.6  让远程主机图形界面在本机显示,无论目标主机是否为图形界面,本机调用目标主机的图形界面不受影响
    底层通过X协议实现通过图形程序让客户端和服务器端的通讯
    对于X协议来说,客户端与服务器端与ssh协议正好相反,本机充当服务器,远程主机相当于客户端
    windows通过远程连接linux,并显示图形界面,使用xmanager中的xstart软件可以实现,退出当前用户登录即可退出xstart远程连接
    
    -t  强制伪终端分配
    多台设备通过逐个跳转,远程连接到远端主机
    如ABCDE五台主机,A连接到E,只能通过A-->B-->C-->D-->E的方式实现远程
    可以通过ssh -t实现,命令如下:
    ssh -t 192.168.32.7 ssh -t 192.168.32.17 ssh 192.168.32.27
    需要逐个输入每台主机的登录密码
    最后一个终端可以不用加-t选项
    

    ssh服务登录验证

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

    ssh命令实现基于key认证

    • 基于密钥的认证:
      (1) 在客户端生成密钥对
        ssh-keygen -t rsa [-P ‘’] [-f “~/.ssh/id_rsa”]
      ssh-keygen -t rsa
      (2) 把公钥文件传输至远程服务器对应用户的家目录
        ssh-copy-id [-i [identity_file]] [user@]host
      ssh-copy-id 192.168.32.128(目标ip地址)
      (3) 测试
    直接远程登录即可,无需输入口令
    ssh  192.168.32.128(目标ip地址)
    

    (4)重设私钥口令:
      ssh-keygen –p
    (5)验证代理(authentication agent)保密解密后的密钥
      这样口令就只需要输入一次
      在GNOME中,代理被自动提供给root用户
      否则运行ssh-agent bash
    (6)钥匙通过命令添加给代理
      ssh-add

    • 在SecureCRT或Xshell实现基于key验证
        在SecureCRT工具—>创建公钥—>生成Identity.pub文件
        转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
        ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

    排错小结:

    ssh是基于key连接通讯双方,如果有主机通过冒充ip地址以及mac地址连接某主机是行不通的,会有警告信息出现,因此基于key的验证方法相对更为安全
    hostA向hostB发起连接请求,
    第一次通讯时,hostA把hostB的公钥/etc/ssh/ssh_host_rsa_key.pub复制到自己主机/root/.ssh/know_hosts文件下
    主机hostB用自己的私钥进行签名加密数据发送给主机hostA,而此时主机hostA已经存有hostB的公钥,如果可以解密,说明hostB是原来的设备,如果无法解密,则说明是另外的设备
    注意:如果hostB的私钥被窃取,那么获取hostB私钥的设备可以冒充hostB与之前和hostB验证过的设备通信,因此对于私钥要做好保密措施
    复制私钥到其他主机时,注意文件的用户、组以及权限问题
    
    如果使用新设备代替旧设备,而新设备的地址改为旧地址的ip,此时,新设备的key与老设备不同,此时想通过该ip地址连接到新设备时,会提示错误信息:提示目标主机的key发生变化
    解决方法:删除本机记录的旧设备的key信息,再次连接新设备即可
    rm -rf  /root/.ssh
    

    如何确认第一次连接的目标主机为可信的目标主机

    拿到目标主机的公钥信息/etc/ssh/ssh_host_rsa_key.pub与当前显示的key进行比较,如果一致,则表示目标可信
    [root@centos6 ~]#ssh 192.168.32.129
    The authenticity of host '192.168.32.129 (192.168.32.129)' can't be established.
    RSA key fingerprint is 3a:19:e1:94:56:01:ed:08:15:7c:1c:30:9d:93:d7:28.
    Are you sure you want to continue connecting (yes/no)?
    
    计算方法:
    cp ssh_host_rsa_key.pub(目标主机公钥) /data
    base64 -d /data/ssh_host_rsa_key.pub  >pubkey
    [root@centos7-1 data]# md5sum pubkey   centos7中出来md5运算,还有sha256运算得出的值
    3a19e1945601ed08157c1c309d93d728  pubkey
    发现与RSA key fingerprint is 3a:19:e1:94:56:01:ed:08:15:7c:1c:30:9d:93:d7:28.中的key一致,说明目标主机可信
    

    实现100台设备批量导入公钥信息:

    使用expect工具
    vim ssh_push_key.sh
    #!/bin/bash
    pass="magedu"
    rpm -q expect &> /dev/null || yum -y install expect
    ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
    while read ip ;do
    expect <<EOF
    spawn ssh-copy-id  -i /root/.ssh/id_rsa.pub  $ip
    #若要增加用户名,则$ip更改为用户@$ip,如:yuan@$ip
    expect {
    "yes/no" { send "yes\n";exp_continue }
    "password" { send "$pass\n" }
    }
    expect eof
    EOF
    done < iplist.txt
    注意:脚本中iplist.txt文件需要生成,可通过脚本实现
    

    scp命令

    • scp命令:
    • scp [options] SRC… DEST/
    • 两种方式:
        scp [options] [user@]host:/sourcefile /destpath
        scp [options] /sourcefile [user@]host:/destpath
    • 常用选项:
        -C 压缩数据流
        -r 递归复制
        -p 保持原文件的属性信息
        -q 静默模式
        -P PORT 指明remote host的监听的端口
      缺点:当某个文件发生变化时,scp会把所有文件全部复制一遍到远程主机,这样一来就会浪费带宽

    rsync命令

    • 基于ssh和rsh服务实现高效率的远程系统之间复制文件
    • 使用安全的shell连接做为传输方式
        rsync –av /etc server1:/tmp 复制目录和目录下文件
        rsync –av /etc/ server1:/tmp 只复制目录下文件
    • 比scp更快,只复制不同的文件
    • 选项:
        -n 模拟复制过程
        -v 显示详细过程
        -r 递归复制目录树
        -p 保留权限
        -t 保留时间戳
        -g 保留组信息
        -o 保留所有者信息
        -l 将软链接文件本身进行复制(默认)
        -L 将软链接文件指向的文件复制
        -a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
    该命令基于增量型复制,只复制发生变化文件,未发生变化的文件不会复制,节约流量带宽,很好的解决了scp的问题
    

    sftp命令

    • 交互式文件传输工具
    • 用法和传统的ftp工具相似
    • 利用ssh服务实现安全的文件上传和下载
    • 使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
        sftp [user@]host
        sftp> help

    pssh工具

    • pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制,使用epel源安装才能使用
    • 选项如下:
        --version:查看版本
        -h:主机文件列表,内容格式”[user@]host[:port]”
        -H:主机字符串,内容格式”[user@]host[:port]”
        -A:手动输入密码模式
        -i:每个服务器内部处理信息输出
        -l:登录使用的用户名
        -p:并发的线程数【可选】
        -o:输出的文件目录【可选】
        -e:错误输入文件【可选】
        -t:TIMEOUT 超时时间设置,0无限制【可选】
        -O:SSH的选项
        -P:打印出服务器返回信息
        -v:详细模式
      示例:
    通过pssh批量关闭seLinux
    pssh -H root@192.168.23.130 -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 
    pssh -H root@192.168.32.120 -i setenforce 0
    
    将标准错误和标准正确重定向都保存至/app目录下
    pssh -H 192.168.32.130 -o /app -e /app -i "hostname"
    
    pssh -H 192.168.32.130 -i hostname
    当不支持ssh的key认证时,通过 -A选项,使用密码认证批量执行指令
    [root@centos7-1 ~]#pssh -H 192.168.32.130 -A -i hostname
    Warning: do not enter your password if anyone else has superuser
    privileges or access to your account.
    Password:                                   输入密码
    [1] 21:46:44 [SUCCESS] 192.168.32.130
    centos7-2.magedu.com
    
    管理多台主机时,需要输入多个密码(假设密码不一致)
    [root@centos7-1 ~]#pssh -H 192.168.32.130 -H 192.168.32.128 -A -i hostname
    Warning: do not enter your password if anyone else has superuser
    privileges or access to your account.
    Password:                                  输入密码
    [1] 21:46:44 [SUCCESS] 192.168.32.130
    centos7-2.magedu.com
    输入第一个密码,则第二个主机命令执行失败
    解决方法:使用基于key验证管理多台主机(无需输入密码),前提时主机之间已经实现基于key的验证
    pssh命令默认基于key验证
    [root@centos7-1 .ssh]#pssh -H 192.168.32.130 -H 192.168.32.128 -i hostname
    [1] 21:53:05 [SUCCESS] 192.168.32.128
    centos6
    [2] 21:53:05 [SUCCESS] 192.168.32.130
    centos7-2.magedu.com
    
    管理大批量主机时,可以把ip地址存入文本中,调用该文本即可
    -h  调用主机文件列表
    [root@centos7-1 ~]#cat iplist.txt 
    192.168.32.128
    192.168.32.130
    [root@centos7-1 ~]#pssh -h iplist.txt -i hostname
    [1] 21:56:07 [SUCCESS] 192.168.32.128
    centos6
    [2] 21:56:07 [SUCCESS] 192.168.32.130
    centos7-2.magedu.com
    
    批量创建账号
    [root@centos7-1 ~]#pssh -h iplist.txt -i "useradd testuser"
    [1] 21:57:07 [SUCCESS] 192.168.32.130
    [2] 21:57:08 [SUCCESS] 192.168.32.128
    [root@centos7-1 ~]#pssh -h iplist.txt -i "getent passwd testuser"
    [1] 21:57:18 [SUCCESS] 192.168.32.128
    testuser:x:501:501::/home/testuser:/bin/bash
    [2] 21:57:18 [SUCCESS] 192.168.32.130
    testuser:x:1001:1001::/home/testuser:/bin/bash
    

    PSCP.PSSH命令

    • pscp.pssh功能是将本地文件批量复制到远程主机
    • pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote
    • Pscp-pssh选项
        -v 显示复制过程
        -r 递归复制目录
    • 将本地curl.sh 复制到/app/目录
      pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
      pscp.pssh -h host.txt /root/test/curl.sh /app/
    • 将本地多个文件批量复制到/app/目录
      pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
    • 将本地目录批量复制到/app/目录
      pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

    PSLURP命令

    • pslurp功能是将远程主机的文件批量复制到本地
    • pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)
    • Pslurp选项
      -L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
      -r 递归复制目录
    • 批量下载目标服务器的passwd文件至/app下,并更名为user
      pslurp -H 192.168.1.10 -L /app/ /etc/passwd user
    如果拉取多个文件,该命令把文件拉取过来以后,会自动创建以对方主机ip为命名的目录存放拉取过来的文件,用以区分文件
    [root@centos7-1 ~]pslurp -H 192.168.32.130 -L /data/ /etc/fstab f1
    [root@centos7-1 data]#tree
    .
    ├── 192.168.32.128
    │   └── f1
    ├── 192.168.32.130
        └── f1
    

    SSH端口转发

    • SSH端口转发
      SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
    • SSH 端口转发能够提供两大功能:
        加密 SSH Client 端至 SSH Server 端之间的通讯数据
        突破防火墙的限制完成一些之前无法建立的 TCP 连接
    • 本地转发:
        -L localport:remotehost:remotehostport sshserver
    • 选项:
        -f 后台启用
        -N 不打开远程shell,处于等待状态
        -g 启用网关功能
      示例:
      ssh –L 9527:telnetsrv:23 -N sshsrv
      telnet 127.0.0.1 9527
      当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
      data<- ->ocalhost:9527<- ->ocalhost:XXXXX<- ->shsrv:22<- ->shsrv:YYYYY<- ->telnetsrv:23
    实验1:本地转发  
    A B C 三台主机,A在互联网(外网),B和C在同一局域网  
    A:192.168.32.6  
    B:192.168.32.7  
    C:192.168.32.17  
    主机B只能通过ssh访问,主机C只能通过telnet访问,主机A不能够直接访问主机C  
    A---->C    A到C使用telnet连接不安全  
    可以通过A--->B--->C实现    
    A---->B  通过ssh连接,该阶段A相当于ssh客户端,B相当于ssh服务端。主机A会开启一个随机端口号,通过22端口连接主机B  
    B---->C  通过telnet连接,该阶段B相当于telnet客户端,C相当于telnet服务端。主机B也会开启一个随机端口号,通过23端口连接主机C  
    由于B和C在公司内网,实现了A到C的安全访问  
    在主机A上进行配置,开启一个端口9527  
    当连接主机A的9527端口时,就会被ssh协议封装起来,传到主机B,主机B收到以后解封装,再通过telnet连接到主机C  
    
    模拟实验:
    三台主机分别安装telnet、telnet-server,相互之间测试通过telnet访问
    systemctl start telnet.socket   开启telnet服务
    ss -ntl   查看telnet23端口是否开启
    在主机C上进行防火墙设置:C拒绝A的访问
    iptables -A INPUT -s  192.168.32.6(拒绝访问的ip地址) -j REJECT 
    在主机A进行操作:
    ssh -L 9527:192.168.32.17:23 -Nf 192.168.32.7
    192.168.32.17  目标服务器地址(telnet server)
    192.168.32.7   主机B地址(ssh server)
    ss -nt  在主机A执行命令查看9527端口是否已开启
    在主机A上进行远程连接
    telnet 127.0.0.1 9527
    关闭隧道  killall ssh
    
    • 远程转发:
      -R sshserverport:remotehost:remotehostport sshserver
      示例:
      ssh –R 9527:telnetsrv:23 –N sshsrv
      让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
      Data<- ->shsrv:9527<- ->shsrv:22<- ->ocalhost:XXXXX<- ->ocalhost:YYYYY<- ->telnetsrv:23
    一般情况下,公司内部不允许外部主机连接内部主机
    因此可以通过从公司内部主机B主动连接外部主机A(公司防火墙一般情况下不会进制从内往外连接),建立连接后,在通过ssh隧道封装telnet等其他协议与公司内部主机C(telnet server)通信
    实验2:远程转发:反向ssh端口转发
    B--->A   B充当ssh客户端,A充当ssh服务端
    A--->B   此过程直接完成
    B--->C   B充当telnet客户端,C充当telnet服务端
    A:192.168.32.6
    B:192.168.32.7
    C:192.168.32.17
    在主机B上进行配置
    ssh -R 9527:192.168.32.17:23  192.168.32.6
    192.168.32.17   目标主机(telnet server)在实际应用中配置,192.168.32.17应配置为公网地址
    192.168.32.6    主机A的地址
    ss -nt  在主机A执行命令查看9527端口是否已开启
    在主机A上远程连接
    telnet 127.0.0.1 9527
    
    实验3:A B C D四台主机  
    A B在同一局域网,C D在同一局域网  
    B C可以通过ssh转发数据  
    实现主机A与主机D通过互联网进行通信  
    两种方法:
    方法1:本地转发
    主机B充当ssh客户端,主机C充当ssh服务端
    命令:ssh -L
    方法2:远程转发
    主机B充当ssh服务端,主机C充当ssh客户端
    命令:ssh -R
    这两种方法最终实现效果一样
    使用smtp协议模拟实验,端口号为25
    该协议不支持远程连接,要在配置文件中更改
    vim /etc/postfix/main.cf
    inet_interfaces = all  把该行前的注释符号去掉
    在主机B上进行配置
    先关闭防火墙iptables -F,再添加策略
    iptables -A -s  192.168.32.6  -j REJECT
    iptables -A -s  192.168.32.7  -j REJECT
    A:192.168.32.6
    B:192.168.32.7
    C:192.168.32.17
    D:192.168.32.27
    本地转发:在主机B上进行操作
    ssh -L 9527:192.168.32.27:25  -Nfg 192.168.32.17
    查看9527端口是否存在,此时9527端口为*:9527,而不是127.0.0.1:9527,说明任意ip地址都可以使用该端口
    在主机A上进行以下操作:
    telnet 192.168.32.7 9527
    
    远程转发:在主机C上进行操作
    ssh -L 9527:192.168.32.27:25  -Nfg 192.168.32.7
    查看9527端口是否存在
    在主机A上进行以下操作:
    telnet 192.168.32.7 9527
    
    • 动态端口转发:
    • 当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
      ssh -D 1080 root@sshserver
      在本机firefox设置代理socket proxy:127.0.0.1:1080
      curl --socks5 127.0.0.1:1080 http://www.qq.com
    动态端口转发
    A:192.168.32.6      谷歌网站
    B:192.168.32.7      虚拟主机VPS
    C:192.168.32.17     上网主机client
    模拟实验
    在主机A上执行命令
    iptables -A INPUT -s  192.168.32.17 -j REJECT
    在主机C上进行操作
    ssh -D 9527 192.168.32.7 -fN
    192.168.32.7  虚拟主机vps ip地址(跳板机)
    此时仍然无法连接谷歌网站,需要配置浏览器的代理服务器地址192.168.32.17  端口:9527
    浏览器设置:preferences--高级--network--setting--手工指定代理服务器地址(manual proxy configuration)--SOCKS Host 127.0.0.1  port 9527
    只能在本机上使用,而且本机必须是linux系统
    
    第四台主机D:192.168.32.27
    通过上网主机client连接谷歌网站
    在主机C上进行操作
    ssh -D 9527 192.168.32.7 -fNg
    此时要配置浏览器的代理服务器地址192.168.32.17  端口:9527
    或curl --socks5 192.168.32.17:9527 http://192.168.32.6,使用该命令无需为浏览器配置代理地址
    

    X协议转发

    • 所有图形化应用程序都是X客户程序
        能够通过tcp/ip连接远程X服务器
        数据没有加密机,但是它通过ssh连接隧道安全进行
    • ssh -X user@remotehost gedit
        remotehost主机上的gedit工具,将会显示在本机的X服务器上
        传输的数据将通过ssh连接加密

    ssh服务器

    • 服务器端:sshd, 配置文件: /etc/ssh/sshd_config
    • 常用参数:
        Port
        ListenAddress ip
        LoginGraceTime 2m
        PermitRootLogin yes
        StrictModes yes 检查.ssh/文件的所有者,权限等
        MaxAuthTries 6
        MaxSessions 10 同一个连接最大会话
        PubkeyAuthentication yes
        PermitEmptyPasswords no
        PasswordAuthentication yes
        GatewayPorts no
        ClientAliveInterval:单位:秒
        ClientAliveCountMax:默认3
        UseDNS yes
        GSSAPIAuthentication yes 提高速度可改为no
        MaxStartups 未认证连接最大值,默认值10
        Banner /path/file
    • 限制可登录用户的办法:
        AllowUsers user1 user2 user3
        DenyUsers
        AllowGroups
        DenyGroups
    man sshd_config   查看配置文件帮助
    sshd_config参数介绍:
     17 #Port 22    端口号,一般情况下要连接到互联网要更改为非标准端口号
     18 #AddressFamily any        any指支持ipv4和ipv6地址
     19 #ListenAddress 0.0.0.0    哪个ip地址监听服务端口号,默认所有ip地址都可以访问22端口,可以指定22端口被本地某个ip地址监听,如:listenaddress 192.168.32.7                                              
     22 HostKey /etc/ssh/ssh_host_rsa_key
     23 #HostKey /etc/ssh/ssh_host_dsa_key
     24 HostKey /etc/ssh/ssh_host_ecdsa_key
     25 HostKey /etc/ssh/ssh_host_ed25519_key  主机之间相互连接使用的key,基于不同算法生成,centos7连接使用ecdsa算法生成的key,centos6连接使用rsa算法生成的key
    
     37 #LoginGraceTime 2m       连接等待时间,默认为2分钟(即连接时输入密码之前状态的等待时间)
     38 #PermitRootLogin yes   允许root登录,默认为yes,如果为no,则root不允许登录,可以先登录普通用户再切换root用户登录
     39 #StrictModes yes  严格模式,是否检查必要文件的权限
     40 #MaxAuthTries 6   最大验证尝试次数为6,但验证时默认为3次
     41 #MaxSessions 10   指每个网络连接开启的会话次数,每个网络连接是指在同一个连接窗口下克隆该窗口的次数最大为10次,
     43 #PubkeyAuthentication yes      基于密码验证
     47 AuthorizedKeysFile      .ssh/authorized_keys    基于key验证文件存放位置
     65 PasswordAuthentication yes   支持用户名密码验证
     
     79 GSSAPIAuthentication no 
     115 UseDNS no
    以上两项建议更改为no,系统连接速度会变快
    
     98 #AllowAgentForwarding yes      允许代理转发
     99 #AllowTcpForwarding yes        允许tcp转发
     117 #MaxStartups 10:30:100   限制并发连接数   
     当最大连接数不超过10次时,不受影响;当连接数超过10次时开始随机拒绝最大连接数的30%主机连接,70%不受影响;当连接数达到100时,拒绝全部主机连接
    112 #ClientAliveInterval 0  客户端存活间隔,默认一直存活,不做检查;如果为其他数字,表示每隔多少秒探测一次客户端是否存活
    113 #ClientAliveCountMax 3   默认探测三次
    Banner /path/file    用户登录时的登录提示,可以在文件中写入提示语句,登录时显示该提示语句
    

    ssh服务的最佳实践
    建议使用非默认端口
    禁止使用protocol version 1
    限制可登录用户
    设定空闲会话超时时长
    利用防火墙设置ssh访问策略
    仅监听特定的IP地址
    基于口令认证时,使用强密码策略
      tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
    使用基于密钥的认证
    禁止使用空密码
    禁止root用户直接登录
    限制ssh的访问频度和并发在线数
    经常分析日志
    知识扩展:

    分析日志/var/log/secure,把失败连接次数过多的ip地址扔到防火墙
    awk '/Failed password for root from/{ip[$(NF-3)]++}END{for (i in ip){if(ip[i]>=3)system("iptables -A INPUT -s "i" -j REJECT")}}' /var/log/secure
    

    二、 dropbear编译安装

    • 源码编译安装:
      1、安装开发包组:yum groupinstall “Development tools”
      2、下载dropbear-2017.75.tar.bz2
      3、解压源码包tar xf dropbear-2017.75.tar.bz2
      4、查看相关编译文档less INSTALL README
      5、开始编译,指定配置文件安装路径
        ./configure --prefix=/app/dropbear --sysconfdir=/etc/dropbear --disable-zlib
      6、make PROGRAMS=“dropbear dbclient dropbearkey dropbearconvert scp”
      7、make PROGRAMS=“dropbear dbclient dropbearkey dropbearconvert scp” install
      8、配置PATH路径,在任意目录下都可以执行该命令
        echo PATH=/app/dropbear/bin:/app/dropbear/sbin:$PATH >> /etc/profile.d/dropbear.sh
        source /etc/profile.d/dropbear.sh
      9、生成运行服务所需的key
        mkdir /etc/dropbear
        cd /app/dropbear/bin
        dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
        dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
      10、运行服务,指定服务端口为2222:
        cd /app/dropbear/sbin
        dropbear -p :2222 -F –E #前台运行
        或dropbear -p :2222 #后台运行
        ss -ntl 查看端口是否启动
        cat /var/run/dropbear.pid 查看dropbear进程号
      11、dropbear软件工具测试
        cd /app/dropbear/bin
        (1)使用dbclient客户端连接其他主机
          source /etc/profile.d/dropbear.sh
          dbclient 192.168.32.128
        (2)使用scp远程复制文件
          此时系统默认使用/usr/bin/下的dbclient,创建软链接指向/app/dropbear/下的dbclient
          ln -s /app/dropbear/bin/dbclient /usr/bin/dbclient
      12、把此服务设置为开机自启动
        dropbear -p :2222 #后台运行 把dropbear设备后台运行
        方法1:在/usr/lib/systemd/system/下配置service文件
        方法2:写入/etc/rc.local文件
          /app/dropbear/sbin/dropbear -p 2222
          chmod +x /etc/rc.d/rc.local 给文件加上执行全兴
      13、如果使用完毕,不再需要该工具,可以删除
        删除此服务
        删除etc/rc.local配置文件中的内容
        杀掉dropbear进程
          killall dropbear
        删除配置文件
          rm -rf /app/dropbear
          rm -rf /etc/dropbear
        删除源码文件
          rm -rf dropbear-2018.76*
        此时本机的scp复制文件存在问题
        删除PATH变量下的路径
          rm -rf /etc/profile.d/dropbear.sh
        删除hash缓存,缓存中存的是/app/dropbear/sbin下的scp
          hash -r 删除全部缓存
          hash -d 删除某条缓存记录

    三、 sudo

    更改分身

    • su 切换身份:su –l username –c ‘command’
    • sudo
        来自sudo包,man 5 sudoers
        sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
        sudo可以提供日志,记录每个用户使用sudo操作
        sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
        sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
        通过visudo命令编辑配置文件,具有语法检查功能
        visudo –c 检查语法
        visudo -f /etc/sudoers.d/test

    sudo

    • 配置文件:/etc/sudoers, /etc/sudoers.d/
    • 时间戳文件:/var/db/sudo
    • 日志文件:/var/log/secure
    • 配置文件支持使用通配符glob:
        ?:任意单一字符
        * :匹配任意长度字符
        [wxc]:匹配其中一个字符
        [!wxc]:除了这三个字符的其它字符
        \x : 转义
        [[alpha]] :字母 示例: /bin/ls [[alpha]]*
    • 配置文件规则有两类;
        1、别名定义:不是必须的
        2、授权规则:必须的

    sudoers

    • 授权规则格式:
        用户 登入主机=(代表用户) 命令
    • 示例:
        root ALL=(ALL) ALL
    • 格式说明:
        user: 运行命令者的身份
        host: 通过哪些主机
        (runas):以哪个用户的身份
        command: 运行哪些命令
    写在子配置文件/etc/sudoers.d目录下,把授权命令写入该目录下自定义的文件中 
    cat /etc/sudoers.d/f1
    wang ALL=(root) /bin/mount /dev/sr0 /mnt
    注意“=”号后的(root)可以省略不写,默认代表root
    示例:
    cat /etc/sudoers/wang
    wang 192.168.32.128=   /bin/cat /etc/shadow
    cat /etc/sudoers/mage
    mage 192.156.32.128=(wang)  ALL
    在mage用户界面
    sudo -u wang sudo /bin/cat  /etc/shadow
    

    别名

    • Users和runas:
        username
        #uid
        %group_name
        %#gid
        user_alias|runas_alias
    • host:
        ip或hostname
        network(/netmask)
        host_alias
    • command:
        command name
        directory
        sudoedit
        Cmnd_Alias

    sudo别名和示例

    • 别名有四种类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
    • 别名格式:[A-Z]([A-Z][0-9])*
      大写字母开头,除了开头,后续的也必须是大写字母、数字或下划线
    • 别名定义:
        Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
      示例:
    示例1:  
    Student ALL=(ALL) ALL  
    %wheel ALL=(ALL) ALL  
    示例2:  
    student ALL=(root) /sbin/pidof,/sbin/ifconfig  
    %wheel ALL=(ALL) NOPASSWD: ALL  
    示例3  
    User_Alias NETADMIN= netuser1,netuser2  
    Cmnd_Alias NETCMD = /usr/sbin/ip  
    NETADMIN ALL=(root) NETCMD  
    示例4  
    User_Alias SYSADER=wang,mage,%admins  
    User_Alias DISKADER=tom  
    Host_Alias SERS=www.magedu.com,172.16.0.0/24  
    Runas_Alias OP=root  
    Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod  
    Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk  
    SYSADER SERS= SYDCMD,DSKCMD  
    DISKADER ALL=(OP) DSKCMD  
    示例4  
    User_Alias ADMINUSER = adminuser1,adminuser2  
    Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]\*, !/usr/bin/passwd root  
    ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel  
    示例5  
    Defaults:wang runas_default=tom  
    wang ALL=(tom,jerry) ALL  
    示例6  
    wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd  
    示例7  
    wang ALL=(ALL) /bin/cat /var/log/messages*  
    这个写法存在漏洞,可以在/var/log/messages文件后跟其他文件
    如:sudo  cat /var/log/messages /etc/shadow
    解决方法:wang ALL=(ALL) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
    

    sudo命令

    • ls -l /usr/bin/sudo
    • sudo –i –u wang 切换身份
    • sudo [-u user] COMMAND
        -V 显示版本信息等配置信息
        -u user 默认为root
        -l,ll 列出用户在主机上可用的和被禁止的命令
        -v 再延长密码有效期限5分钟,更新时间戳
        -k 清除时间戳(1970-01-01),下次需要重新输密码
        -K 与-k类似,还要删除时间戳文件
        -b 在后台执行指令
        -p 改变询问密码的提示符号
      示例:-p “password on %h for user %p:”
    更多相关内容
  • 除了以源码的方式安装OPENSSH外,还可以自动安装,方式如下,首先更新源列表sodu apt-get update然后进行安装,sodu apt-get install openssh-server下面是源码自配置安装,首先需要三个源码压缩包openssh-7.7p1.tar...

    除了以源码的方式安装OPENSSH外,还可以自动安装,方式如下,首先更新源列表sodu apt-get update

    然后进行安装,sodu apt-get install openssh-server

    下面是源码自配置安装,首先需要三个源码压缩包

    openssh-7.7p1.tar; openssl-1.0.2g.tar ;zlib-1.2.11.tar,下载地址如下

    openssh:https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

    openssl:https://www.openssl.org/source/old/1.0.2/

    zlib:http://www.zlib.net/

    下载完成后进行解压,放入统一文件夹下,

    一、编译安装zlib:

    进入zlib-1.2.11文件夹,依次输入,

    ▶ ./configure

    ▶ make

    ▶ sudo make install

    二、编译安装openssl:

    进入openssl-1.0.2g文件夹,依次输入,

    ▶ ./configure

    ▶ make

    ▶ sudo make install

    三、必须完成前两步,才能对openssh的编译安装:

    ▶ ./configure -prefix=/usr/local -sysconfdir=/etc/ssh -with-ssl-dir=/usr/

    local/opnessl -without-openssl-header-check

    ▶ make

    ▶ sudo make install

    如果有以下错误提示:

    Privilege separation user sshd does not exist

    解决办法:编辑/etc/passwd :  sudo vi /etc/passwd

    添加一项:

    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    四、启动:

    sudo /usr/local/sbin/sshd &

    五、查看是否启动:

    sudo ps -e | grep ssh

    六、登录SSH

    首先键入 ifconfig,查看Ubuntu的ip地址为192.168.253.131

    cf4b70a95c88abeecc951c60982da0a4.png

    以windows客户端Putty登入为例,打开Putty,在Host Name(or IP address)键入 Linux服务器的IP地址,

    Connection type选SSH,Saved Sessions保存服务器名称,单击Open进行连接,进入命令框,login as:输入Linux用户

    用户名@IP地址’s password:输入用户密码

    即可登录SSH服务器对Linux进行操作,退出操作则键入exit。

    七、关闭SSH服务器:

    Linux下打开终端,

    查看已启动的服务器 sudo ps -e | grep ssh ,将显示各服务器线程的PID

    sudo kill +PID ,即可关闭对应的服务器。

    展开全文
  • OpenSSH服务的启动和停止启动和停止OpenSSH服务,可以通过OpenSSH服务器的启动脚本文件“/etc/rc.d/init.d/sshd”来实现。另外,也可以使用service命令来启动、停止SSH服务。1.启动OpenSSH服务启动OpenSSH服务,可以...

    OpenSSH服务的启动和停止

    启动和停止OpenSSH服务,可以通过OpenSSH服务器的启动脚本文件“/etc/rc.d/init.d/sshd”来实现。另外,也可以使用service命令来启动、停止SSH服务。

    141693697_1_20180818055933457.gif

    1.启动OpenSSH服务

    启动OpenSSH服务,可以有两种不同的方式:通过OpenSSH服务器的启动脚本文件“/etc/rc.d/init.d/sshd”来启动和使用service命令来启动。

    (1)通过OpenSSH服务器的启动脚本文件启动OpenSSH服务

    通过OpenSSH服务器的脚本文件“/etc/rc.d/init.d/sshd”启动OpenSSH服务,命令执行如下。

    [root@localhost ~]# /etc/rc.d/init.d/sshd start

    启动sshd:                        [确定]

    [root@localhost ~]#

    命令执行后,OpenSSH服务开始运行。

    (2)使用Linux下的service命令启动OpenSSH服务

    使用service命令启动OpenSSH服务,命令执行如下。

    [root@localhost ~]#service sshd start

    启动 sshd:                   [确定]

    [root@localhost ~]#

    命令执行后,OpenSSH服务停止运行。

    2.重启OpenSSH服务

    重启OpenSSH服务,可以有两种不同的方式:通过OpenSSH服务器的启动脚本文件“/etc/rc.d/init.d/sshd”来重启和使用service命令来重启。

    (1)通过OpenSSH服务器的启动脚本文件重启OpenSSH服务

    通过OpenSSH服务器的脚本文件“/etc/rc.d/init.d/sshd”重启OpenSSH服务,命令执行如下。

    [root@localhost ~]# /etc/rc.d/init.d/sshd restart

    停止sshd:                        [确定]

    启动sshd:                        [确定]

    [root@localhost ~]#

    命令执行后,OpenSSH服务自动停止并再次启动。

    (2)使用Linux下的service命令重启OpenSSH服务

    使用service命令重启OpenSSH服务,命令执行如下。

    [root@localhost ~]#service sshd restart

    停止 sshd:                   [确定]

    启动 sshd:                   [确定]

    [root@localhost ~]#

    命令执行后,OpenSSH服务自动停止并再次启动。

    3.停止OpenSSH服务

    停止OpenSSH服务,可以有两种不同的方式:通过OpenSSH服务器的启动脚本文件“/etc/rc.d/init.d/sshd”来停止和使用service命令来停止。

    (1)通过OpenSSH服务器的启动脚本文件停止OpenSSH服务

    通过OpenSSH服务器的脚本文件“/etc/rc.d/init.d/sshd”停止OpenSSH服务,命令执行如下。

    [root@localhost ~]# /etc/rc.d/init.d/sshd stop

    停止sshd:                        [确定]

    [root@localhost ~]#

    命令执行后,OpenSSH服务停止运行。

    (2)使用Linux下的service命令停止OpenSSH服务

    使用service命令停止OpenSSH服务,命令执行如下。

    [root@localhost ~]#service sshd stop

    停止 sshd:                   [确定]

    [root@localhost ~]#

    命令执行后,OpenSSH服务停止运行。

    提示:OpenSSH服务的启动和停止方法、格式都是一样的,只不过使用的命令不同,比如:停止用stop,启动用start。

    展开全文
  • win10,openssh服务的安装、打开和关闭、连接和断开

    一、安装openssh服务

    点击左下角"win图标","设置"

    找到"应用"模块

    点进"可选功能"

    点"添加功能"

    点"OpenSSH服务器",右下方会有个"安装",点击安装

    安装开始后,在可选功能界面会有个进度条,耐心等待安装完成即可。

     

    二、OpenSSH连接的使用

    以管理员身份运行"命令提示符"!以管理员身份运行"命令提示符"!以管理员身份运行"命令提示符"!

    net start sshd # 开启ssh服务  (windows中)
    net stop sshd # 关闭ssh服务  (windows中)   
    服务的开启和关闭不影响你使用ssh连接,只要你有OpenSSH客户端

    logout             # linux中退出系统 (不想输入,直接Ctrl+D组合键也可)

    注意看下图,在我进行ssh root连接后(root是远程linux的用户名,ip是linux中使用ifconfig命令获得的),输入正确的密码,logout这部分是linux中使用的退出连接。

    要进行这样的实际操作,需要有一台可以远程连接的电脑(也可以是本地虚拟机)

     

     

    展开全文
  • openssh服务

    2021-09-24 14:44:29
    1 openssh详解 1.1 什么是openssh OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。...OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务 ...
  • 8.openssh服务

    千次阅读 2022-05-04 19:15:43
    openssh服务
  • 最近用低版本的OpenSSH(5.9p1版本) 的漏洞给系统留了个后门 , 可以劫持root密码...建议升级OpenSSH ,升级OpenSSH的操作并不复杂 ,但如果是线上环境 ,那么就需要谨慎操作 特别需要注意的是 如果是通过ssh远程连...
  • OpenSSH 服务

    2022-06-21 23:08:33
    1、OpenSSH简介 2、SSH协议版本 3、SSH 认证方式 4、OpenSSH 的工作模式 5、OpenSSH客户端工具使用 6、采用SSH密钥登录 7、OpenSSH服务端配置 8、SSH 安全注意事项
  • 故此文以Centos (Centos5 ) 为例详细讲解如何配置证书验证登陆,具体操作步骤如下: 确认系统已经安装好OpenSSH的server 和client 查看有没有安装node rmp -node 安装gcc 确认本机sshd的配置文件(需要root权限) $ ...
  • Openssh一组实用程序使我们能够在计算机之间创建安全的加密连接。在本教程中,我们将介绍一些最有用的选项,我们可以使用这些选项来更改sshd,Openssh守护程序以使您的Linux系统管理工作更轻松。在本文中,我们...
  • windows上安装openSSH服务

    千次阅读 2021-12-01 21:32:02
    从 Win10 1809 和 Windows Server 2019 开始 Windows 开始支持 OpenSSH Server。 Install Win32 OpenSSH Manoj Ampalam edited this pageon 14 Sep 2018· Install Win32 OpenSSH (test release) Note and ...
  • windows上OpenSSH服务安装及启动

    千次阅读 2021-11-25 14:46:46
    windows上OpenSSH服务安装及启动 1,下载openSSH windows版 GitHub下载链接 我安装的是64位版本 2,解压到C:\Program Files\OpenSSH,建议是放在此目录下 3,cmd到openSSH路径下 依次执行 1)安装sshd服务 ...
  • OPENSSH服务器

    千次阅读 2018-12-03 19:18:00
    1.OPENSSH概念 OpenSSH是SSH(Secure Shell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之 间传送文件。而实现此功能的传统方式,如telnet、 rcp ftp、 rlogin、rsh都是极为不安全的,并且...
  • centos OpenSSH升级OpenSSH_8.8p1 OpenSSL 1.1.1l(ssh.tar) mv ssh.tar /tmp &&cd /tmp tar -zxvf ssh.tar cd sshupdate/ sh sshupdate.sh 需连外网!!升级后需使用CRT连接,ssh升级后scp不可用!! 谨慎升级,仅...
  • 下载 OpenSSH-Win64.zip 二进制包(或者根据需要下载其他版本)。 将二进制包解压到 C:\Program Files\ 中,文件夹可以不改名。该包中包含客户端(ssh)与服务端(sshd)命令。 第二步、配置客户端 为了能够...
  • window10 安装 openSSH服务

    千次阅读 2020-08-17 12:03:30
    下载 下载openSSH windows版 ...提取码:open 解压到指定路径 解压到C:\Program Files\OpenSSH 不要...1)安装sshd服务 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 2)开放22号端口(如果你在win
  • 1)执行powershell-executionpolicybypass-fileinstall-sshd.ps1命令安装服务。原因私钥文件由.\ssh-keygen.exe-A命令创建...进入安装目录,C\ProgramFiles\OpenSSH-Win64,解决手动创建目录C\ProgramData\ssh。......
  • linux服务器openSSH升级

    千次阅读 2022-03-14 09:02:03
    此方案升级过程不会关闭旧版 ssh 服务,无需担心安装失败无法导致远程连接。如果服务器在外地机房且无人值守,请谨慎操作。 修复依据 根据漏洞原理修复 操作前提 无 查看版本:openssh -V 具体操作步骤如下: 步骤 1...
  • Linux中的Openssh服务器部署 一.实验环境的搭建 需要两台主机: client:westos.client.westos.com 172.25.254.10 server: westos.node1.westos.com 172.25.254.20 命令nm-connection-editor 设定IP地址 ...
  • 系统配置信息如下:新安装的系统,防火墙暂时关闭 1 .下载OpenSSH-Win32或OpenSSH-Win64 安装包,根据不同的系统选择不同的安装包,如果是64位系统,选择32位可以。 下载地址:...
  • Openssh服务的key认证3.1 Openssh的认证方式3.2 ssh key认证生成非对称加密密钥3.3 sshd安全优化参数详解 1. Openssh介绍 OpenSSH 是 SSH (Secure SHell远程连接) 协议的免费开源软件 。 软件安装名称——Openssh-...
  • 一、环境说明 ...1、选择下载OpenSSH-Win64,解压到C:\Program Files目录下,重命名为OpenSSH。 2、在CMD窗口执行下面的命令 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 ...
  • 一.实验环境 client: localcast.localdomain 172.25.254.10 server: westcp.localdomain ...二.Openssh服务的基本信息 Openssh 作用: 在企业中的运维工作,不是1V1的运维 运维工程师可能要1Vn 在运维工程师对服...
  • Openssh服务

    2020-04-04 20:22:33
    文章目录1 ssh基本知识2 ssh命令的用法3 openssh服务的key认证4 更改端口5 指定IP可连6 限制登录超级用户7 用户黑白名单 1 ssh基本知识 [root@localhost ~]# nm-connection-editor ^C [root@localhost ~]# ssh root@...
  • Linux之openssh服务配置

    千次阅读 2018-04-12 16:19:14
    78 PasswordAuthentication no|yes #开启或关闭ssh的默认认证方式(改完之后重启服务,其中no不用密码登录。) #在78为yes的情况下操作以下步骤: 48 PermitRootLogin no|yes #开启或关闭root用户的登陆权限...
  • SSH 远程管理1.1 SSH 概述1.2 OpenSSH 概述1.3 配置 OpenSSH 服务端1.4 SSH 客户端使用(1) ssh 远程登录(2) scp 远程复制(3) sftp 安全文件传送协议1.5 构建密钥对验证的 SSH 体系(1) 在客户端创建密钥对(2) 将公钥...
  • CentOS8.4 OpenSSH服务配置(SSH协议)

    千次阅读 2022-03-09 11:05:25
    OpenSSH服务的基本功能配置案例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,191
精华内容 8,876
关键字:

关闭openssh服务