zoukankan      html  css  js  c++  java
  • SSH远程连接服务

    一、SSH 原理图

    二、SSH 原理描述

      2.1:什么是SSH

        SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候SSH会先对联机的数据包通过加密技术进行加密处理,加密后在进行数据的传输,确保了传输中的安全性,SSH服务主要提供两个服务功能:一个是远程联机的SSH服务,一个是借助SSH协议来传输数据的SFTP服务

      2.2:SSH原理阐述

        ① 服务端开启ssh服务监听22端口

        ② 客户端发送联机请求(携带IP和端口)

        ③ 客户端服务端进行联机加密认证

        ④ 认证通过联机成功

      2.3:SSH的两种认证方式

        ① 基于密码口令的认证

        ② 基于秘钥的安全认证

      2.4:SSH认证类型阐述

        基于密码口令的方式:

          基于密码的安全认证就是我们一直在用的,只要知道服务器的SSH连接账号和密码(当然也要知道服务器的IP和端口(默认22)),就可以通过客户端远程登录到主机了,所以的传输过程都是加密的

        基于秘钥的安全认证:

          ① 运行SSH服务,生成密钥对

          ② 客户端发送公钥到服务端(通过ssh-copy-id或者其他的方式)

          ③ 客户端发送连接请求

          ④ 服务端进行对密钥的验证

          ⑤ 验证成功服务端将用公钥加密质询,发送给客户端

          ⑥ 客户端用自己的私钥解密质询

          ⑦ 客户端将解密后的质询发送给服务端

          ⑧ 服务端验证质询

          ⑨ 验证通过,建立连接

      2.5:SSH联机加密过程原理阐述

        ① SSH服务端先生成一个1024-bit的公钥

        ② 客户端发送请求

        ③ 服务端把公钥发给客户端

        ④ 客户端生成256-bit的私钥,并且和服务端发过来的公钥进行整合

        ⑤ 客户端把整合的秘钥对发给服务端

        ⑥ 使用秘钥对进行联机

      PS:SSH2版本中为了修补SSH1中不验证整合秘钥对的漏洞,加入了一个确认联机正确性的Diffie-Hellman机制(每次联机都会进行秘钥对的校验)

    三、SSH 搭建部署

    安装ssh服务
    yum -y install openssh openssl
    
    启动服务
    systemctl start sshd
    
    
    配置文件
    tree /etc/ssh/
    /etc/ssh/
    ├── moduli
    ├── ssh_config   客户端配置文件
    ├── sshd_config 服务端配置文件
    ├── ssh_host_ecdsa_key
    ├── ssh_host_ecdsa_key.pub
    ├── ssh_host_ed25519_key
    ├── ssh_host_ed25519_key.pub
    ├── ssh_host_rsa_key
    └── ssh_host_rsa_key.pub
    
    
    使用
    基于密码的连接
    ssh root@192.168.163.129
    
    也可以之家连接执行命令
    ssh root@192.168.163.130 ifconfig ens33

    四、SSH 企业级优化

    在SSH 配置文件中有很多项是可以做优化的
    vim /etc/sshd_config
    
    Port    #默认22端口,修改其他端口
    ListenAddress     # 指定特定的监听地址
    PermitEmptyPasswords    # 是否允许密码为空的用户远程登录,默认为no
    PermitRootLogin    # 是否允许root登录,默认yes,改为no安全些
    UseDNS    # dns解析,默认yes 要改为no 提高速度
    GSSAPIAuthentication    # 解决linux之间使用远程连接慢的问题
    
    
    快速更改优化方法使用sed命令
    \cp /etc/ssh/sshd_config{,.bak}
    sed -i 's%#Port 22%Port 56666%' /etc/ssh/sshd_config
    
    sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
    
    sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
    
    sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
    
    sed -i 's%GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config
    
    a=$(ifconfig  | awk -F [" ":]+ 'NR==2{print $3}') | sed -i 's%#ListenAddress 0.0.0.0%ListenAddress '$a' %' /etc/ssh/sshd_config
    
    egrep "UseDNS|GSSAPIAuthentication|PermitRootLogin|PermitEmptyPasswords|ListenAddress|Port" /etc/ssh/sshd_config
    
    
    一条命令搞定
    a=$(ifconfig | awk -F [" ":]+ 'NR==2{print $3}') | sed -ir '13 iPort 56666\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no\nListenAddress '$a'' /etc/ssh/sshd_config
    
    
    重启服务
    systemctl restart sshd

    五、SSH 扩展(非交互式功能)

      5.1:expect

      5.2:sshpass

      5.3:pssh

    六、SSH 总结

      ① SSH是安全加密协议,用于远程连接linux服务器

      ② SSH默认端口是22,安全协议版本是SSH2,除了SSH2还有SSH1,但是1有漏洞

      ③ SSH服务端只要包含两个服务,一个是SSH一个是SFTP

      ④ Linux SSH 客户端包含ssh远程连接命令,以及远程scp命令等

      ⑤ SSH配置文件的优化很重要,可以提高服务器的安全性,也可以提高远程连接的速度

    七、SSH 错误及解决办法

    首先、确保server端的ssh服务是开的(service shhd start)
    
    然后在client端输入: ssh usrname@serverip (远程登录)
    
    scp filename usrname@serverip:/URL (远程传输)
    
     
    
    常出现的问题:
    
     
    
    问题一
    
    ssh登录的时候链接端口失败
    
    提示(1):
    
    # ssh 192.168.***.**
    
    ssh: connect to host 192.168.***.** port 22: No route to host
    
    这由于server端没有开机或是网络不通(这个原因很多,最简单的是网线没有插。还有就是可能会是网卡down了等)如果是网卡down了ifup相应的网卡再试试
    
     
    
    提示(2):
    
    # ssh zhou@192.168.***.**
    
    ssh: connect to host 192.168.***.** port 22: Connection refused
    
    这是由于对方server的ssh服务没有开。这个server端开启服务即可。 
    
    如何开启ssh服务呢?
    
    首先确保要登录的主机安装了openssh-client(ubuntu有默认安装,如果没有则sudo apt-get install openssh-client),如果要使本机开放SSH服务就需要安装 openssh-server sudo apt-get install openssh-server
       然后确认sshserver是否启动了:
       ps -e |grep ssh
    如果看到sshd那说明ssh-server已经启动了。
    如果没有则可以这样启动:sudo /etc/init.d/ssh start
    ssh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。
    然后重启SSH服务:
    sudo /etc/init.d/ssh stop
    sudo /etc/init.d/ssh start
    然后使用以下方式登陆SSH:
    ssh zhou@192.168.***.** zhou为192.168.***.**机器上的用户,需要输入密码。
    断开连接:exit
    
     
    
    问题二、
    
    ssh到server上的时候密码是对的但是报如下信息:
    
    # ssh 192.168.***.**
    
    root@192.168.***.**'s password:
    
    Permission denied, please try again.
    
     
    
    这个是由于如果不输入用户名的时候默认的是root用户,但是安全期间ssh服务默认没有开root用户的ssh权限
    
     
    
    解决方法:
    
     
    
    要修改root的ssh权限,即修改 /etc/ssh/sshd_config文件中
    
    PermitRootLogin no 改为 PermitRootLogin yes
    
     
    
    问题三
    
    登录是出现如下提示:
    
    ssh root@192.168.***.**
    
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
    
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    
    It is also possible that the RSA host key has just been changed.
    
    The fingerprint for the RSA key sent by the remote host is
    
    76:fb:b3:70:14:48:19:d6:29:f9:ba:42:46:be:fb:77.
    
    Please contact your system administrator.
    
    Add correct host key in /home/fante/.ssh/known_hosts to get rid of this
    
    message.
    
    Offending key in /home/fante/.ssh/known_hosts:68
    
    RSA host key for 192.168.***.** has changed and you have requested strict checking.
    
    Host key verification failed.
    
     
    
    server端密码或是其他发生改变的时候。
    
    解决方法一般就需要删除~/.ssh/known_hosts的东西,然后再登录即可。
    作者:朱敬志

    -------------------------------------------

    个性签名:在逆境中要看到生活的美,在希望中别忘记不断奋斗

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!

    支付宝 微信

    也可以关注我的微信公众号,不定时更新技术文章(kubernetes,Devops,Python)等

    微信公众号
  • 相关阅读:
    块编程指南
    libxml2:Debug模式可以编译,Distribution下不可以?
    CIO应该考虑的九个外包神话和现实
    【Android游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)
    自定义 UITableViewCell 的 accessory 样式
    提升UNIX安全性的Unix SSH示例配置
    java 跟.net webservice 互通问题
    外包合同中降低成本的战略性技巧
    get post
    Android SAX API: XmlResourceParser及其扩展应用
  • 原文地址:https://www.cnblogs.com/zhujingzhi/p/9574839.html
Copyright © 2011-2022 走看看