SSH访问远程

SSH常见分类:

  • telnet-远程登录协议,23/TCP

    • 明文认证、明文传输(不安全)
  • ssh(Secure SHell)-应用层协议,22/TCP
    • 通讯和认证过程加密、主机认证
    • 用户认证过程加密
    • 数据传输过程加密
  • dropbear-嵌入式系统专用SSH

OpenSSH 简介

OpenSSH用于在远程系统上安全运行shell。如果您在可提供ssh服务的远程Linux系统中拥有用户帐户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可用于在远程系统中运行命令。

SSH有两个版本:

  • v1-基于CRC-32做MAC,无法防范中间人(man-in-middle)攻击
  • v2-双方主机协议选择安全的MAC方式。基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证

SSH认证方式

openssh有两种认证方式:

  • 口令认证
  • 密钥认证

openSSH工作模式

openSSH基于C/S(客户端/服务器)构架工作

#服务器端sshd
/etc/ssh/sshd_config
#客户端ssh
/etc/ssh/ssh_config
ssh-keygen #密钥生成器
ssh-copy-id #公钥传输至远程服务器
scp #跨主机安全复制工具

openSSH配置基于密钥的身份认证

用户可通过使用公钥身份验证进行ssh登录身份验证。ssh允许用户使用私钥-公钥方案进行身份验证。这意味着将生成私钥和公钥这两个密钥。私钥文件用作身份验证凭据,像密码一样,必须妥善保管。公钥复制到用户希望登录的系统,用于验证私钥。公钥并不需要保密。拥有公钥的ssh服务器可以发布仅持有您私钥的系统才可解答的问题。因此,可以根据所持有的密钥进行验证。如此一来,就不必在每次访问系统时键入密码,但安全性仍能得到保证。

使用ssh-keygen命令生成密钥,将会生成私钥和公钥

  • ~/.ssh/id_rsa #私钥
  • ~/.ssh/id_rsa.pub #公钥

注意

生成密钥时,系统将提供指定密码的选项,在访问私钥时必须提供该密码。如果私钥被偷,除颁发者之外的其他任何人很难使用该私钥,因为已使用密码对其进行保护。这样,在攻击者破解并使用私钥前,会有足够的时间生成新的密钥对并删除所有涉及旧密钥的内容。

生成密钥后,密钥将默认存储在家目录下的.ssh/文件夹里。

私钥和公钥的权限就分别为600和644。.ssh/目录权限必须是700。

在可以使用基于密钥的身份验证前,需要将公钥复制到目标系统上。可以使用ssh-copy-id完成这一操作。

通过ssh-copy-id将密钥复制到另一系统时,它默认复制~/.ssh/id_rsa.pub文件。

#生成密钥
[root@Lynk ~]# ssh-keygen -t rsa
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:kKfhcqCOlPwsS9Nb3OILPRTU4MHr0bprs/A7sPrTs08 root@Lynk
The key's randomart image is:
+---[RSA 2048]----+
| .+o |
| o..o |
| .o* . |
|. .. =.* |
| +. o.* S |
|.o+.+=. |
|.+.*+*.E |
|. +oBB+ |
| ooooO@. |
+----[SHA256]-----+ #将密钥复制给服务器
[root@Lynk ~]# ssh-copy-id root@192.168.26.129
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.26.129 (192.168.26.129)' can't be established.
ECDSA key fingerprint is SHA256:bpCNTMSwW5iFAtt2aAQ9QNrdd1ojBZDCMLsA0wJ/K3k.
ECDSA key fingerprint is MD5:1a:34:7a:fb:dd:cf:ff:ea:68:ae:3f:2f:87:ed:2c:78.
Are you sure you want to continue connecting (yes/no)? yes
/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@192.168.26.129's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.26.129'"
and check to make sure that only the key(s) you wanted were added. #登录服务器
[root@Lynk ~]# ssh root@192.168.26.129
Last login: Mon Jan 7 07:05:25 2019 from 192.168.26.1
[root@LynkSer ~]#

在我们完成服务的设置之后,可能还会有开启防火墙来保证主机安全的需求,这时应该为防火墙添加富规则来保证我们的ssh服务可以通过防火墙。

#禁止ssh服务连入
[root@LynkSer ~]# firewall-cmd --remove-service=ssh --permanent
success
[root@LynkSer ~]# firewall-cmd --reload
success #此时远程主机无法通过ssh连接本地主机
[root@Lynk ~]# ssh root@192.168.26.129
ssh: connect to host 192.168.26.129 port 22: No route to host #添加放行富规则
[root@LynkSer ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.26.128/24 service name=ssh accept' --permanent
success
#重载防火墙让配置生效
[root@LynkSer ~]# firewall-cmd --reload
success #再次尝试连入本地主机
[root@Lynk ~]# ssh root@192.168.26.129
Last login: Mon Jan 7 07:38:11 2019 from 192.168.26.128
#成功了,退出吧
[root@LynkSer ~]# exit
logout
Connection to 192.168.26.129 closed.

自定义 SSH 服务配置

OpenSSH服务器通常无需修改,但会提供其他安全措施,可以在配置文件/etc/ssh/sshd_config中修改OpenSSH服务器的各个方面。

#是否允许root用户远程登录系统
PermitRootLogin {yes|no}
#仅允许root用户基于密钥方式远程登录
PermitRootLogin without-password
#是否启用密码身份验证,默认开启
PasswordAuthentication {yes|no}

SSH使用实例

#登录
[root@Lynk ~]# ssh root@192.168.26.129
Last login: Mon Jan 7 07:23:45 2019 from 192.168.26.128
#退出
[root@LynkSer ~]# exit
logout
Connection to 192.168.26.129 closed.
#在远程服务器上执行一个命令
[root@Lynk ~]# ssh root@192.168.26.129 'echo "I AM LYNK" > /opt/whoami'
[root@Lynk ~]# ssh root@192.168.26.129
Last login: Mon Jan 7 07:24:50 2019 from 192.168.26.128
[root@LynkSer ~]# cat /opt/whoami
I AM LYNK
#查看当前所有登录到这台主机的会话
[root@LynkSer ~]# w
07:29:10 up 30 min, 3 users, load average: 0.17, 0.09, 0.07
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 07:00 26:06 0.73s 0.19s vim /etc/sysconfig/network-scripts/ifcfg-e
root pts/0 192.168.26.1 07:05 23:45 0.03s 0.03s -bash
root pts/1 192.168.26.128 07:29 2.00s 0.08s 0.04s w
***

SSH安全

  • 密码应该经常换且足够复杂
  • 使用非默认端口
  • 限制登录客户端地址
  • 仅监听特定的IP地址
  • 禁止管理员直接登录
  • 仅允许有限制用户登录
    • AllowUsers
    • AllowGroups
  • 使用基于密钥的认证
  • 禁止使用空密码
  • 禁止使用SSHv1版本
  • 设定空闲会话超时时长
  • 利用防火墙设置ssh访问策略
  • 限制ssh的访问频度和并发在线数
  • 做好日志的备份,经常分析(集中于某台服务器)

OpenSSH配置与基本使用的更多相关文章

  1. openssh允许root用户登录

    openssh默认是不允许root用户登录的,未改配置直接以正确的root账号密码登录会提示用户名密码错误之类. 好消息是openssh配置十分清晰,基本所有的服务端配置都在/etc/ssh/sshd ...

  2. (转)Windows7安装OpenSSH

    (转自:http://blog.sina.com.cn/s/blog_4a0a8b5d01015b0n.html) OpenSSH很老了,所以... 最开始只是因为openSSH启动不了,才用的Mob ...

  3. Ubuntu下配置安装Hadoop 2.2

    ---恢复内容开始--- 这两天玩Hadoop,之前在我的Mac上配置了好长时间都没成功的Hadoop环境,今天想在win7 虚拟机下的Ubuntu12.04 64位机下配置, 然后再建一个组群看一看 ...

  4. linux系统升级openssh

    一.升级前准备工作 安装openssh过程需gcc,zlib-devel,openssl-devel,等编译环境,如果通过rpm包来安装,需要解决各种依赖包,故配置本地yum源解决依赖问题. 1. 配 ...

  5. Windows 10系统运维之OpenSSH

    随着PowerShell和OpenSSH的日渐成熟,在客户终端Windows居多的运维之中,使用Win32-OpenSSH和Powershell来管理一些客户机变成了相当实用的一种解决方案. Open ...

  6. OpenSSH 密码和公钥认证原理探究

    目录 配置和保护SSH H3 - 使用SSH 访问远程命令行 H4 - 什么是OpenSSH ? H4 - 登录方式: H4 - 登录并执行临时命令: H4 - 查看登录用户 H4 - 登录原理 密码 ...

  7. Linux网络服务10——远程访问及控制

    Linux网络服务10--远程访问及控制 一.SSH概述 1.SSH简介 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数 ...

  8. 使用VNC+SSH建立安全的远程桌面访问WINDOWS服务器

    用了一段时间的MONO,现在MONO也支持了ENTITY FRAMEWORK 6.但是实际上在LINUX环境里用MYSQL还是会有很多坑.并且之前在网络游戏服务端SCUT上扩展一些功能时候也遇到了一些 ...

  9. 【Linux】积累笔记

    ■ 关于查看系统的一些版本信息 查看系统的发行版本可以用 cat /etc/issue 或者 cat /etc/redhat-release (Centos上) 查看系统的内核版本以及系统位数 una ...

随机推荐

  1. 原生js,通过document.getElementByClassName获取元素的索引值

    let itemList = document.getElementsByClassName('sky-item') // 一行所有元素 let index = 0 for(let i = 0; i& ...

  2. 调整数组顺序使奇数位于偶数前面(python)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. # -*- codi ...

  3. 第九章 词典 (b)散列:原理

  4. Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用

    一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...

  5. ssh 与远程机器保持心跳(linux)

    文件/etc/ssh/ssh_config末尾加上: TCPKeepAlive yes ServerAliveInterval

  6. PAT1131(dfs)

    In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...

  7. .net 报错access to the path c:\tempimagefiles\msc_cntr_0.txt is denied

    报错信息: 解决方法: 在 Web.Config 的 <System.Web> 里加 <identity impersonate="true"/> 节点即可 ...

  8. jasper打印实例2 ----通过文件字节流获得PDF格式图片

    public class IspReportUtil { public static String exportReportToByte(CommonReportHandler handler)thr ...

  9. RxJS之catchError

    Catches errors on the observable to be handled by returning a new observable or throwing an error. 返 ...

  10. NIO和IO(BIO)的区别及NIO编程介绍

    IO(BIO)和NIO的区别:其本质就是阻塞和非阻塞的区别. 阻塞概念:应用程序在获取网络数据的时候,如果网络传输数据很慢,那么程序就一直等着,直到传输完毕为止. 非阻塞概念:应用程序直接可以获取已经 ...