安全加密之--openssh

本文涉及的产品
云防火墙,500元 1000GB
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

作者:李强
参考:man,info,magedu讲义,万能的internet
实验环境:VMware® Workstation 12 Pro ,Centos 6.9,Centos 7.4,SecureCRT Version 8.1.4
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。

1、OPENSSH

[http://www.openssh.com/portable.html]

OPENSSH是一个历史悠久的工具,BSD的。用来实现ssh协议的一个工具,目前的ssh主版本为V2
主要的软件包有:
openssh(要这个软件包生效,要安装下面的2个软件包)
openssh-server
openssh-clients

配置文件:

/etc/ssh目录

二进制文件:

  • opensclient

/usr/bin/ssh|scp|slogin|ssh-agen|ssh-add|ssh-keygen|ssh-copy-in|sftp

  • openserver

/usr/bin/sshd|sshd-keygen

帮助文件:

具体查看man ssh|sshd|ssh_config|sshd_config等。

ssh

ssh 用来安全的登录远程主机使用的工具(OPENSSH SSH Client)

语法:
  ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char]
         [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
         [-O ctl_cmd] [-o option] [-p port] [-Q cipher | cipher-auth | mac | kex | key] [-R [bind_address:]port:host:hostport]
         [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command]
描述:
sshSSH client)是一个登录远程主机并在远程主机上执行命令的工具。
它是用来取代rloginrsh,为2个不可信的主机在不安全的网络上之间建立一个安全的加密的连接。
X11连接和任意的TCP端口都能转发在此安全的通道上。这就是下面的讲的静态端口转发和动态端口转发。
选项 说明
-1,2;-4,6 1和2是强制指定用ssh协议的哪个版本,4,6是强制指定ipv4还是ipv6地址,默认版本2,ipv4
-b bind_address 绑定使用本地主机哪个地址作为建立连接源ip,仅在设备有多个地址时考虑使用
-c cipher_spec 选择用户加密会话的加密规范,默认是3des,man ssh_config 查关键字Ciphers有详细信息
-e
-F configfile 指定配置文件,如果在命令行指定了配置文件,那么全局配置文件就会被忽略,默认个人配置文件为~/.ssh/config,没有建立
-l login_name 指定登录远程主机的用户名,默认为当前客户端终端用户名
-p port 指定要连接远程主机的哪个接口
-v verbose mode ,打印关于程序的排除故障信息,主要用来排除连接,验证,配置文件的问题,可以多个v,比如-vv,-vvv,最多三个,一个比一个详细
-X,x X11 开启X11转发和关闭X11转发
-n null 将标准输入重定向到/dev/null ,也就是把保准输入都丢给垃圾桶不处理。后面加& 就是后台执行不接收标准输入。参考-f选项

例子:

ssh 127.0.0.1 //这是最简单的命令,用户名默认当前主机名,端口默认为22

ssh root@127.0.0.1 -p 9527 //指定登录用户名为root,访问端口为9527

ssh -l root -p 9527 127.0.0.1 //同上

ssh 127.0.0.1 cat /etc/passwd //登录后执行cat /etc/passwd命令即退出

  • 基于用户密码的验证

服务器端会将/etc/ssh/sshhost*_key.pub中的公钥传给客户端(选哪个公钥看协商的加密算法是哪个),客户端选择yes/no保存到~/.ssh/know_hosts
然后客户端用基于服务器端的公钥进行数据加密,进行用户名和密码校验,通过后,登录成功。

  • 基于key的验证

正常情况下,我们只需要信任服务器即可,但是现在我们要相互信任,就不要对暗号了。
所以clinet生成密钥对,server器本身就有密钥对,现在我们收到了服务器的公钥,此时我们把自己的公钥传给服务器,服务器将其放在~/.ssh/authorized_keys中,以后我们用不同用户登录server的时候,服务器就去响应的用户下找这个文件,然后取出它的公钥来加密一个随机数,client通过自己的私钥解密报文得到随机数,然后通过服务器的公钥加密,server通过自己的私钥解密后,将此随机数和自己的随机数对比,如果一致,则允许登录。

ssh-keygen //生成密钥对
ssh-keygen -p //加密私钥
ssh-copy-id //把公钥复制给远程主机


graph LR

A[client]-->|1:客户端发起请求|B[server]

A[client]-->|2:服务器查找公钥并加密随机数|B[server]

A[client]-->|3:客户端私钥解密,用服务器公钥加密随机数|B[server]

A[client]-->|4:服务器用私钥解密,对比2个随机数|B[server]

ssh静态端口转发

端口转发就是隧道tunnel,ssh监听需要走隧道的端口,然后数据从ssh tunnel走。

举例比如http服务,如果在浏览器中配置socket代理,那么当你发起http请求的时候,将数据转发给你ssh指定监听的本地端口,比如1080,当1080收到来自http的数
据,然后会丢给ssh处理,ssh会将http的数据封装在ssh报文中,在ssh client和ssh server之间建立的连接中传递,然后ssh接收到这个报文解密后,转发此报文。
ssh server就是个代理的中转站。

端口转发两大功能:

加密client和server之间的通讯数据,一些telnet,ftp,http等明文传输的数据,可以封装在ssh协议的的载荷中。

能够突破防火墙的限制,建立一些无法建立的TCP连接。

  • 选项

    -L  local_socket:remote_socket  :指定本地ip和端口和对端ip和端口,ssh就会开一个本地端口来监听,当收到访问此端口的数据就通过隧道转发给ssh server,然后ssh serverremote_socket建立链接。
    -R  remote_socket:local_socket  :指定对端ip和端口和本地ip和端口,
  • 例子

ssh -L 127.0.0.1:9527:192.168.23.71:23 
telnet 127.0.0.1 9527

graph LR
A[A主机]-->|A能ssh到B|C[B主机]
A[A主机]-->|A想telnet到C|D[C主机]
A[A主机]-->|禁止telnet访问|B[防火墙]
B[防火墙]-->C[B主机]
C[B主机]-->|B能telnet到C|D[C主机]

现在A想要telnet访问C主机,但是C主机上拒绝了A的访问,怎么办呢,这里就可以用到ssh端口转发的第二个功能,突破防火墙的限制,建立一些无法建立的连接

ssh动态端口转发

  • 选项

    -D [bind_address:]port:指定一个本地端口,然后ssh将做为一个socket服务器,支持sockets4sockets5两种协议,这里就不需要指定http要访问的哪些网站的地址和端口,动态的从http请求里获取,然后ssh server解密后,代理其转发出去。
  • 例子

![这里本来是要插入下,当我本地通过浏览器的socket代理访问网页时,在ssh server 产生的一些的,server 去和remote_socket建立的TCP链接,makedown语法不会]

配合端口转发使用的选项

  • 选项
-N: 指定不执行远程命令,就是不打开远程的bash窗口,仅对端口转发有效
-f:指定ssh后台启用,

ssh 和sshd 配置文件

  • ssh
/etc/ssh/ssh_config    //
~/.ssh/config         //
~/.ssh/know_hosts
  • sshd
/etc/ssh/sshd_config
/etc/ssh/shots.equiv
/etc/ssh/ssh_known_hosts
~/.ssh/authorized_keys

安全日志信息

tail -f /var/log/secure

scp

scp 用来远程主机和本地主机之间的文件复制,但是有个问题就是scp并不检查文件是否变化,因此会产生不必要的带宽浪费,

  • 语法:
     scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program]
         [[user@]host1:]file1 ... [[user@]host2:]file2
  • 描述:

scp 基于ssh的一个远程主机之间的文件复制。看上面的格式也可以看出来,用户名可以不写,默认是当前用户,主机名或ip地址可以不写默认自己,文件名必须要写。主机名后面必须要加上:后面的文件名其实也可以不用写,默认是登陆用户的家目录。但是源文件总是要的。

  • 选项
-q:quit,静默不显示
-r:Recursively,递归,默认只能复制普通文件,如果想要复制目录需要加-r选项,注意的是这里针对软连接复制过来的内容是软连接的源文件而不是源文件本身
-p:Preserves,保存文件的权限,修改时间和访问时间
-P:Port ,这里注意的是,因为-p给preserves用了,因此指定远程主机端口用大写的-P
  • 例子

本地到远程

scp /etc host2:file

远程到本地

scp host2:file /etc

远程到远程

scp host1:file1 host1:file2 host2:/tmp

rsync

rsync 这个工具就解决了scp的问题,它主要用于主机之前的文件同步,如果文件属性没有变化,就不会同步。这样我想到了云盘的自动同步功能。

rsync 是由单独的软件包rsync提供的和openssh没有关系,但是它是承载在remote shell链接上的,默认是ssh,可以-e指定rsh等。

rsync 是个服务,getent services rsync 用873/tcp

rsync是非独立服务,需要安装xinetd软件包由xinetd服务代理。默认是关闭状态,不使用rsync daemon模式。

配置文件为/etc/rsyncd.conf

  • 用法
       Local:  rsync [OPTION...] SRC... [DEST]

       Access via remote shell:
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

       Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

       Usages with just one SRC arg and no DEST arg will list the source files instead of copying.
  • 描述

rsync 不支持2个远程主机之间的文件复制,src和dest都必须要有安装rsync

rsync 有2中传输模式,一种是通过remote shell(ssh或者rsh);一种是通过TCP直接链接到rsync daemon。如上所示,remote ssh 主机后为":"而daemon 主机后为"::"

  • 选项

    -a:--archive 归档
    -b:--backup 备份
    -r:--recursive 递归
    -n:--dry-run 模拟
    -v:--verbose 显示过程
    -p:--perms 保留权限
    -t:--times 保留时间戳
    -g:--group 保留所有组
    -o:--owner 保留所有者
    -l:--links 只复制软链接本身
    -L:复制软链接的源,
  • 注意

    复制文件时的格式如果最后为/,比如/etc/代表复制目录,/etc就是文件的意思
    总之你能想到的cp之间那些事情,基本上rsync也能干,具体的man rsync

  • 例子

sftp

sftp 这个工具是基于ssh实现的ftp工具,也就是ssh转发了ftp包,sftp用法和ftp基本一样。其是一个交互式命令。

  • 用法
     sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config] [-o ssh_option] [-P sftp_server_path]
          [-R num_requests] [-S program] [-s subsystem | sftp_server] host
     sftp [user@]host[:file ...]
     sftp [user@]host[:dir[/]]
     sftp -b batchfile [user@]host
  • 描述

  • 选项
-b:batchfile ,直接执行file里的命令而不是通过交互式读取stdin,有些命令执行失败会中断sftp,可以在命令前加dash,如-get xxxx
  • 交互式命令

登录后输入?或help即可知

2、pssh软件包

[http://code.google.com/p/parallel-ssh/]

pssh这个是用python编写的基于ssh和scp的并行工具软件包。
parellels 
配置文件

库文件

/usr/lib/python2.7/site-packages/psshlib 目录下

二进制文件

/usr/bin/pssh|pscp.pssh|pnuke|pslurp|prsync

帮助文件

man pssh|pscp.pssh|pnuke|pslurp|prsync

pssh

  • 用法
       pssh  [-vAiIP]  [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout]
       [-O options] [-x args] [-X arg] command ...

       pssh -I [-vAiIP] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir]  [-t  time-
       out] [-O options] [-x args] [-X arg] [command ...]
  • 描述

parallels ssh program,在多个主机上并行执行ssh的一个工具。pssh有2个变量需要发给远程主机,因此远程主机的sshd_config配置文件中必须要有如下配置:

AcceptEnv PSSH_NODENUM PSSH_HOST

PSSH_NODENUM 表示每个ssh会话的编号从0开始,PSSH_HOST 表示host列表中的主机名

  • 选项

    -H:--host host_string 主机少的时候用"" 空格隔开多个主机 如host1 ,"host1 host2 host3"
    -h:--hosts host_file  主机多的时候,放置在hostfile文件中 格式如上:user@host:port
    -i:--inline 当每个主机命令完成后,显示stdout和stderr
    -o:--outdir 标准输出的存放目录,文件按照指定的host_socket命名
    -e: --errdir 标准错误输出的存放目录,文件按照指定的host_socket命名
    -p: --print 显示输出,功能有限,多个主机输出会交错
    更多详情man pssh
  • 例子

pssh -i -H "192.168.23.61 192.168.23.71" cd /home;pwd;ls

pssh -H 192.168.23.71 -o /tmp/stdout -e /tmp/stderr hostnamectl

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
  • 描述

将本地的local文件复制到多台主机上,命名为remote

  • 选项
    -a:--archive 归档,保留一些属性
    -r:--recurvise 递归,复制目录时使用

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
  • 描述

将远程多台主机上的remote文件复制到本地,命名为local

  • 选项
    -L:指定从远程主机下载到本机的存储的目录
    -r:递归复制目录

prsync

  • 用法
  • 描述

和pscp一样的用法,和rsync一样的特性,不同的是并行在多台主机上执行

  • 选项
    -a:--archive 归档模式
    -r:--recursive 递归

3、dropbear

dropbear 是ssh的另一种实现,因为其体积小,功能简单因此常用于嵌入设备中。

编译dropbear


本文转自 lajifeiwomoshu 51CTO博客,原文链接:http://blog.51cto.com/lajifeiwomoshu/2059561

相关文章
|
1月前
|
安全 网络安全 区块链
网络安全与信息安全:构建数字世界的防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要屏障。随着网络攻击手段的不断升级,从社交工程到先进的持续性威胁(APT),我们必须采取更加严密的防护措施。本文将深入探讨网络安全漏洞的形成原因、加密技术的应用以及提高公众安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
在这个数字信息日益膨胀的时代,网络安全问题成为了每一个网民不可忽视的重大议题。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全漏洞如同隐藏在暗处的“黑洞”,时刻准备吞噬掉我们的信息安全。而加密技术作为守护网络安全的重要工具之一,其重要性不言而喻。同时,提高公众的安全意识,也是防范网络风险的关键所在。本文将从网络安全漏洞的定义及成因出发,解析当前主流的加密技术,并强调提升安全意识的必要性,为读者提供一份详尽的网络安全指南。
|
2月前
|
存储 SQL 安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已经成为个人、企业乃至国家安全的重要组成部分。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
随着互联网技术的飞速发展,网络安全问题日益凸显。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全事件层出不穷。本文将从网络安全漏洞的定义与分类入手,探讨常见的网络攻击手段;随后深入解析加密技术的原理及其在保护信息安全中的作用;最后强调提升公众与企业的安全意识的重要性,并提出具体的建议。通过综合运用这些知识点,我们可以更好地构建起一道道坚固的防线,守护我们的数字世界。
|
22天前
|
存储 安全 5G
|
27天前
|
安全 算法 网络安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已成为全球关注的焦点。无论是个人隐私还是企业数据,都面临着前所未有的风险和挑战。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供实用的知识,帮助构建更加安全的网络环境。
【10月更文挑战第4天】 在数字化浪潮中,网络安全与信息安全成为不可忽视的议题。本文通过分析网络安全漏洞的类型与成因,探讨加密技术的原理与应用,并强调提升安全意识的必要性,为读者提供一套全面的网络安全知识框架。旨在帮助个人和企业更好地应对网络威胁,保护数字资产安全。
109 65
|
18天前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
2月前
|
人工智能 供应链 安全
网络安全与信息安全:构建数字世界的坚固防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要基石。本文旨在探讨网络安全漏洞、加密技术及安全意识等关键领域,通过深入浅出的方式,引导读者理解网络安全的核心要素,并分享实用的防护策略,共同守护我们的数字世界。
随着互联网技术的飞速发展,网络安全威胁日益凸显,成为全球关注的焦点。本文聚焦网络安全的三大核心议题——网络安全漏洞、加密技术与安全意识,旨在揭示它们之间的相互关联与重要性。通过剖析真实案例,展现网络攻击的复杂性与破坏力;解析加密技术的原理与实践,强调其在保护数据安全中的关键作用;同时,倡导提升公众安全意识,构建多层次的网络安全防护体系。本文不仅为专业人士提供技术参考,也旨在提高普罗大众的网络安全认知,共同筑牢数字世界的安全防线。
129 10
|
2月前
|
SQL 安全 算法
网络安全与信息安全的守护之道在数字化时代,网络安全和信息安全已成为企业和个人不可忽视的重要议题。本文将探讨网络安全漏洞、加密技术以及安全意识等方面的知识,帮助您建立更安全的网络环境。
随着互联网技术的飞速发展,网络安全问题日益凸显,如何保护个人及企业的敏感信息成为亟待解决的难题。本文从网络安全漏洞、加密技术和安全意识三个方面展开,详细介绍了当前面临的主要安全威胁及应对策略,旨在提升公众的安全意识和防护能力。
33 1
|
23天前
|
安全 大数据 网络安全
网络安全与信息安全:守护数字世界的坚盾在数字化浪潮席卷全球的今天,网络安全已成为维系社会稳定、促进经济发展的重要基石。本文旨在深入探讨网络安全漏洞、加密技术及安全意识等核心议题,通过分享前沿知识与实用策略,助力构建更加安全可靠的网络环境。
【10月更文挑战第8天】 本文聚焦网络安全领域的关键要素,包括安全漏洞的识别与防御、加密技术的演进与应用,以及安全意识的培养与提升。通过对最新研究成果和实际案例的分析,文章揭示了网络安全威胁的多样性和复杂性,强调了综合防护策略的重要性。同时,倡导社会各界共同参与,形成全民网络安全意识,共筑数字空间的安全防线。
47 0
|
2月前
|
存储 安全 数据库
Uno Platform 安全数据存储秘籍大公开!加密、存储、读取全攻略,让你的数据固若金汤!
在软件开发中,安全的数据存储至关重要。本文介绍如何在跨平台开发框架 Uno Platform 中实现安全数据存储,包括选择合适的数据存储方式(如本地文件或 SQLite 数据库)和使用 Bouncy Castle 加密库对数据进行 AES 加密。通过示例代码展示了数据的加密、存储及解密过程,帮助开发者保护用户敏感信息,防止数据泄露。
42 3
|
1月前
|
存储 安全 数据库
Uno Platform 安全数据存储秘籍大公开!加密、存储、读取全攻略,让你的数据固若金汤!
在 Uno Platform 中实现安全的数据存储需要选择合适的数据存储方式,并对存储的数据进行加密。通过加密数据,可以保护用户的敏感信息,防止数据泄露。同时,在读取和使用数据时,需要进行解密操作,确保数据的可用性。希望本文对你在 Uno Platform 中实现安全的数据存储有所帮助。
27 0