ssh_sshpass - CSDN
ssh 订阅
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。 展开全文
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
信息
简    称
SSH
作    用
提供安全性的协议
中文名
安全外壳协议
外文名
Secure Shell
ssh功能
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" [1]  。
收起全文
精华内容
参与话题
  • SSH从入门到精通+项目实战

    万人学习 2018-10-22 21:38:05
    1.掌握Struts1.x的导包及配置;Struts1.x结合JSP实现视图层的应用;2.掌握Struts2.x的导包及配置;Struts2.x结合JSP实现视图层的应用;3.掌握Hibernate的导包及配置;Hibernate结合JSP实现...5.SSH整合的配置及应用
  • SSH是什么??

    千次阅读 2019-05-22 21:57:53
    首先,SSH是struts+spring+hibernate的一个集成框架,它不是一个框架,而是把多个框架紧密的结合在一起,用于构建灵活的多层Web应用程序。 然后详细说一下组成SSH的这三个框架: Struts 1.什么是Struts?? Struts...
    • 首先,SSH是struts+spring+hibernate的一个集成框架,它不是一个框架,而是把多个框架紧密的结合在一起,用于构建灵活的多层Web应用程序。
    • 然后详细说一下组成SSH的这三个框架:

    Struts
    1.什么是Struts??
    Struts基于MVC的框架,它是通过采用JavaServlet/JSP技术来实现基于Java EEWeb应用的MVC设计模式的应用框架,是MVC的一个具体实现。
    2.Struts的核心构成是什么??在这里插入图片描述

    Struts的核心同样也是MVC的核心,Struts是MVC的一个具体产品。
    

    a.Model
    由Action,ActionForm以及JavaBean组成,其中ActionForm用于将用户请求的参数封装成为ActionForm对象,我们可以理解为实体,由ActionServlet转发给Action,Action处理用户请求,将处理结果返回到界面。
    b.View
    这一部分采用JSP和taglib来实现界面的渲染。
    c.Controller
    Controller是Struts的核心控制器,负责拦截用户请求,通过调用Model来实现处理用户请求的功能。
    3.为什么要使用Struts??
    使用Struts作为系统的整体基础架构,负责MVC的分离,将页面从业务逻辑分离出来,使用页面更加灵活多变,不会影响业务逻辑,简化了基于MVC的web应用程序的开发,使开发更高效。
    Hibernate
    1.什么是Hibernate??
    Hibernate是一个关系映射框架,它对JDBC进行了轻量级的封装,使我们使用面向对象的思想操作关系型数据库。
    2.Hibernate的核心组成??
    在这里插入图片描述
    3.为什么要使用Hibernate??
    a.Hibernate是JDBC的轻量级对象封装,使与关系型数据库打交道更轻松。
    b.对象化,使我们可以以面向对象的思想操作关系型数据库简化了Dao层的编码工作,使开发更对=对象话了。
    c.支持各种数据库,更换数据库简单,不需要改代码。
    Spring
    1.什么是Spring??
    是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
    2.Spring的核心组成??
    在这里插入图片描述
    a.IOC
    它不是一个技术,是一种设计模式,通过依赖注入的方式,由spring管理和控制对象之间的依赖关系,避免硬编码所造成的过度程序耦合。
    b.AOP
    通过预编译的方式和运行期动态代理实现程序功能的唯一维护的一种技术。
    c.容器
    能管理对象的生命周期,对象与对象之间的依赖关系就是容器。
    3.为什么要使用Spring??
    Spring的核心思想是IOC和AOP,spring使管理对象更加方便,极大的降低了组件之间的耦合度。
    总结
    SSH不仅实现了视图,控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离,系统的灵活性更好,可复用性更高。

    展开全文
  • SSH 详解

    千次阅读 2018-08-08 15:47:01
    SSH服务详解   第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密...

    SSH服务详解

     

    第1章 SSH服务

    1.1 SSH服务协议说明

    SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。

    SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用 SSH 协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。

    在默认状态下,SSH服务主要提供两个服务功能:

    n 一是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务。

    n 另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的.提供更安全的SFTP服务(vsftp,proftp)。

    1.1.1 ssh远程连接排错过程

    1.2 SSH加密技术说明

    简单的说,SSH加密技术就是将人类可以看得懂的数据,通过一些特殊的程序算法,把这些数据变成杂乱的无意义的信怠,然后,通过网络进行传输,而当到了目的地后,在通过对应的解密算法,把传过来的加密的数据信怠解密成加密前的可读的正常数据。因此,当数据在互联网上传输时即使被有心的黑客监听窃取了,也很难获取到真正黑要的数据。

    当前,网络上的数据包加密技术一般是通过所谓的一对公钥与私钥(PublickeyandPivatekey)组合成的密钥对进行加密与解密操作。如下图,A-Server要给B_Client传数据,首先会通过本地的公钥加密后再到发到网络上传输。而加密的数据到达B_Client端后,再经由B_Client本地的私钥将加密的数据解密出来。由于在intemet上传输过程中的数据是加密过的,所以,传输的数据内容一般来说是比较安全的。

     

    图1-1 ssh认证连接的过程

    1.2.2 ssh实现安全链接建立,利用要是和锁头

    1. 钥匙=私钥 锁头=公钥,私钥可以解密公钥

    2. 公钥可以再网络中传输,私钥再本地主机保存

    1.2.3 ssh加密算法

    v1漏洞: 密钥不更换

    v2 定期更换密钥

    利用Diffie-Hellman机制定期更新密钥

    1.3 ssh知识要点:

     ssh是安全的加密协议,用于远程链接linux服务器

     ssh 默认端口是22,安全协议版本sshv2,出来2之外还有1(有漏洞)

     ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务

     linux ssh 客户端包括ssh 远程链接命令,以及远程拷贝scp命令

    1.4 SSH服务软件详细说明

    1.4.1 什么是ssh服务

    SSH服务端是一个守护讲程 (daemon).他在后台运行并响应来自客户端的连接请求。 SSH服务端的讲程名为sshd,负责实时监听远程SSH客户端的远程连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。这个SSH服务就是我们前面基础系统优化中保留开机自启动的服务之。

    ssh客户端包含ssh以及像scp(远程拷贝) slogin(远程登陆) sftp(安全FTP文件传输)等应用程序。

    ssh的工作机制大致是本地的ssh客户端先发送一个连接请求到远程的ssh服务端,服务端检查连接的客户端发送的数据包和IP地址,如果确认合法,就会发送密钥给 SSH的客户端,此时,客户端本地再将密钥发回给服务端,自此连接建立。

    1.4.2 ssh软件安装

    客户端

    [root@nfs01 ~]# rpm -qf `which ssh`

    openssh-clients-5.3p1-122.el6.x86_64

    服务端软件

    [root@nfs01 ~]# rpm -qf `which sshd`

    openssh-server-5.3p1-122.el6.x86_64

    1.4.3 openssh-clinets 软件的主要内容:

    [root@nfs01 ~]# rpm -ql openssh-clients

    /etc/ssh/ssh_config         ---ssh客户端配置文件

    /usr/bin/.ssh.hmac

    /usr/bin/scp                  ---远程复制命令

    /usr/bin/sftp                 ---远程文件传输服务

    /usr/bin/slogin              ---远程登陆命令

    /usr/bin/ssh                  ---ssh远程登陆管理主机

    /usr/bin/ssh-add

    /usr/bin/ssh-agent

    /usr/bin/ssh-copy-id        ---ssh服务分发公钥命令

    /usr/bin/ssh-keyscan

    1.4.4 openssh-server 软件的主要内容

    [root@nfs01 ~]# rpm -ql openssh-server

    /etc/rc.d/init.d/sshd      #ssh服务启动脚本

    /etc/ssh/sshd_config       #ssh服务配置文件

    /etc/sysconfig/sshd        #ssh创建密钥有关

    /usr/sbin/.sshd.hmac       #ssh加密算法有关文件

    /usr/sbin/sshd             #ssh服务进程启动命令

    注意:使用sshd采用绝对路径进行启动

    [root@test ~]# sshd

    sshd re-exec requires execution with an absolute path

    1.5 ssh服务配置文件说明:

    01. 配置文件中所有注释信息,表示默认参数配置

    02. 配置文件中#空格 后面内容表示说明信息

                  #参数 表示配置参数信息

    03. 配置文件参数信息修改后,一旦变为注释,即还原为默认配置

    1.5.1 ssh服务的配置文件路径

    vim  /etc/ssh/sshd_config

    修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的。

    一般来说SSH服务使用默认的配置已经能够很好的工作了,如果对安全要求不高,仅仅提供SSH服务的情况,可以不需要修改任何配置。

    1.5.2 配置文件中常用配置说明

    [root@test ~]# vim /etc/ssh/sshd_config

    #       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

     

    # This is the sshd server system-wide configuration file.  See

    # sshd_config(5) for more information.

     

    # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

     

    # The strategy used for options in the default sshd_config shipped with

    # OpenSSH is to specify options with their default value where

    # possible, but leave them commented.  Uncommented options change a

    # default value.

     

    # OpenSSH is to specify options with their default value where

    # possible, but leave them commented.  Uncommented options change a

    # default value.

     

    Port 25113                   #端口

    ListenAddress 10.0.0.41   #监听地址(本地网卡地址),指定本地网卡那个网卡提供服务

    PermitRootLogin no         #是否允许root用户登陆

    #PermitEmptyPasswords no  #禁止空密码登陆

    #UseDNS no                   #不使用DNS

    GSSAPIAuthentication no    #API认证

    # 连接慢的解决

    #AddressFamily any         #指定监听ipv4地址,或是ipv6地址,或者所有都监听

    配置文件内容说明:

    井号(#)注释的参数信息为默认配置

    井号(#)后面有空格的为描述信息

    井号(#)后面没有空格的为参数信息

    另外:配置文件参数信息修改后,一旦变为注释,即还原为默认配置

    1.5.3 配置文件语法检查方法

    使用sshd -t 命令 对配置文件的语法进行检查

    正确

    [root@backup ~]# sshd -t /etc/ssh/sshd

    Extra argument /etc/ssh/sshd.

    语法格式有错误  ↓

    [root@test ~]# sshd -t /etc/ssh/sshd_config

    /etc/ssh/sshd_config: line 50: Bad configuration option: uthorizedKeysFile

    /etc/ssh/sshd_config: terminating, 1 bad configuration options

    1.5.4 ListenAddress 监听地址的说明

    图1-2 ssh服务监听参数说明

    如图所示,sshd_config配置文件中实际监听本地的网卡,并非网络地址

    监听地址只能监听本地网卡上配置的地址,监听的网卡可以对请求做出相应,为未监听的网卡不响应请求。

    1.5.5 SSH配置文件相关参数详细说明

    命令参数

    参数说明

    Port

    指定sshd进程监听的端口号,默认为22.可以使用多条指令监听多个端口.

    默认将在本机的所有网络接□上监听,但是可以通过ListenAddress指走只在某个特定的接口上监听.

    PermitEmptyPasswords

    是否允许密码为空的用户远程登录.默认为"no"

    PermitRootLogin

    是否允许root登录.可用值如下:"yes"(默认)表示允许."no"表示禁止.

    "without-password"表示禁止使用密码认证登录."forced-commands-only"表示只有在指走了command选项的情况下才允许使用公钥认证登录.同时其它认证方法全部被禁止.这个值常用于做远程备份之类的事情.

    1.多开一个窗口

    2.临时多部署一条连接方式

    3.给普通用户sudo权限

    UseDNS

    指定定sshd是否应该对远程主机名进行反向解折,以检查此主机名是否与其IP地址真实对应.默认值为"yes”.

    ListenAddress

    指定监听并提供服务相应的网卡地址信息

    1.5.6 快速修改配置参数

    sed -i '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no'  /etc/ssh/sshd_config

    1.6 ssh服务认证类型

    01. 基于口令认证方式

    02. 基于密钥认证方式

    1.6.1 基于密码的认证类型

    基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。

    演示了 SecureCR及ssh客户端连接,口令验证的测试。

    [root@test ~]# ssh 10.0.0.250

    The authenticity of host '10.0.0.250 (10.0.0.250)' can't be established.

    RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '10.0.0.250' (RSA) to the list of known hosts.

    root@10.0.0.250's password:    #需要输入密码

    Last login: Mon Oct 16 21:13:58 2017 from 10.0.0.1

    [root@test ~]#

    1.6.2 基于密钥的安全认证方法

    基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一对密钥对,然后把公用密钥(锁头)(Public key)放在需要访问的目标服务器上,另外,还需要把私有密钥(钥匙)(Private key)放到SSH的客户端或对应的窖户端服务器上。

    私钥不能在网络中传输---私钥可以解密公钥

    公钥可以再网路中传输---公钥不能解密私钥

    此时,如果要想连接到这个带有公用密钥的SSH服务器,客户端SSH软件或者客户端服务器就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户的家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的SSH客户端发送过来的公用密钥进行比较。如果两个密钥一致,SSH服务器就用公用密钥加密"质询"(challenge)并把它发送给SSH客户端。

    1.7 基于秘钥登录配置

     

    1.7.1 环境准备

    作用

    主机名

    ip

    管理服务器

    m01

    10.0.0.61

    备份服务器

    backup

    10.0.0.41

    存储服务器

    nfs01

    10.0.0.31

    1.7.2 第一个里程碑: 在备份服务器上创建密钥对

    [root@backup ~]# ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):   #指定密钥对的保存路径

    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:

    72:48:65:1d:25:69:e1:4c:ae:2b:6f:a5:aa:70:96:1e root@backup

    The key's randomart image is:

    +--[ RSA 2048]----+     #2048表示加密的位数为2048位

    |        o.==.      |

    |       o =+.       |

    |      .  .+        |

    |     . . .         |

    |      o S           |

    |     . o ..        |

    |  . E . .o         |

    |   = . oo           |

    |    o..o.           |

    +-----------------+

    参数说明:

          -t 指定创建密钥对的类型,可以创建的类型如下↓

    Specifies the type of key to create.  The possible values are “rsa1” for protocol version 1 and “dsa”, “ecdsa” or “rsa” for protocol version 2.

    查看创建出来的密钥对:

    [root@backup ssh]# ll ~/.ssh/

    total 12

    -rw------- 1 root root 1675 Oct 18 11:07 id_rsa         #私钥文件

    -rw-r--r-- 1 root root  393 Oct 18 11:07 id_rsa.pub    #公钥文件

    -rw-r--r-- 1 root root  784 Oct 11 16:27 known_hosts

    1.7.3 第二个里程:将公钥分发给存储服务器

    [root@backup ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.31 #用户使用当前用户

    root@172.16.1.31's password:   #注意:首次分发密钥需要输入对端服务器的用户密码

    Now try logging into the machine, with "ssh '172.16.1.31'", and check in:

     

      .ssh/authorized_keys    #公钥分发到对端后进行改名

     

    to make sure we haven't added extra keys that you weren't expecting.

    说明:

       通过 man 手册找到密钥分发的命令格式。

       -i 参数指定 公钥文件的存放位置

    [use@]表示使用的用户,默认使用当前登陆的用户

    [root@backup ~]# man ssh-copy-id

    Formatting page, please wait...

    SSH-COPY-ID(1)                                                  SSH-COPY-ID(1)

    NAME

           ssh-copy-id  -  install  your  public  key in a remote machine's autho-

           rized_keys

    SYNOPSIS

           ssh-copy-id [-i [identity_file]] [user@]machine

    1.7.4 第三个里程碑:进行登录测试

    [root@backup ~]# ssh nfs01

    Last login: Wed Oct 18 10:13:17 2017 from 10.0.0.1

    [root@nfs01 ~]#

    1.8 telnet服务简介

    1.8.1 部署telnet服务

    第一个里程碑:安装telnet服务软件

    [root@test ~]# yum install telnet telnet-server -y

    第二个里程碑:设置开机自启动

    [root@test ~]# vim /etc/xinetd.d/telnet

    修改xinetd下的配置文件,从而管理telnet服务

    [root@test ~]# vim /etc/xinetd.d/telnet
    # default: on
    # description: The telnet server serves telnet sessions; it uses \
    #       unencrypted username/password pairs for authentication.
    service telnet
    {
            flags           = REUSE
            socket_type     = stream
            wait            = no
            user            = root
            server          = /usr/sbin/in.telnetd
            log_on_failure += USERID
            disable         = no
    }

    第三个里程碑: 启动xinetd 服务,让telnet能够开机自启动

    [root@test ~]# /etc/init.d/xinetd start

    Starting xinetd:                                           [  OK  ]

    1.8.2 客户端测试

    说明:

        telnet服务默认不支持root用户直接登陆。

    [C:\]$ telnet 10.0.0.250

    Connecting to 10.0.0.250:23...

    Connection established.

    To escape to local shell, press 'Ctrl+Alt+]'.

    CentOS release 6.9 (Final)

    Kernel 2.6.32-696.el6.x86_64 on an x86_64

    test login: oldboy

    Password:

    Last login: Wed Oct 18 09:41:19 from 10.0.0.1

    [oldboy@test ~]$

    1.8.3 ssh与telnet区别(对比示意图)

    01.ssh是加密的服务协议,telnet服务是非加密的

    02.ssh服务默认支持root用户登陆,telnet用户默认不支持root用户登陆

     

    1.9 进行免密码scp传输测试

    [root@backup ~]# scp -rp  /etc/hosts nfs01:/tmp/

    hosts                                         100%  357     0.4KB/s   00:00  

    1.9.1 scp的基本语法使用:

    scp - secure copy (remote file copy program)

    每次都是全量拷贝,增量拷贝rsync

    推:PUSH

    scp -P22 -rp /tmp/oldboy oldboy@10.0.0.143:/tmp

    参数说明:

    <- -P(大写,注意和ssh命令的不同)接端口,默认22端口时可以省略-P22;

    <- -r递归,表示拷贝目录;

    <- -p表示在拷贝前后保持文件或目录属性;

    <- -l limit 限制速度。

    <- /tmp/oldboy为本地的目录。“@”前为用户名,“@”后为要连接的服务器的IP。IP后的:/tmp目录,为远端的目标目录。

    说明:

    以上命令作用是把本地/tmp/oldboy拷贝到远端服务器10.0.0.143的/tmp目录;

    拉:PULL

    scp -P22 -rp root@10.0.0.7:/tmp/oldboy /opt/

    说明:

    还可以把远端目录抓到本地

    结论:

    scp为远程拷贝文件或目录的命令,更多用法,请man scp;

    拷贝权限为连接的用户对应的权限。

    1.10 使用sftp进行基于密钥的文件传输

    1.10.1 sftp简介

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分.

    1.10.2 sftp命令说明

    [root@m01 ~]# sftp -oPort=22  172.16.1.31

    Connecting to 172.16.1.31...

    sftp>

    说明:

       -o        连接的时候指定选项

    Port=22  端口指定为22、

    1.10.3 sftp使用参数说明

    操作远程服务器

    ls    显示远端主机的列表

    cd   切换远程的工作目录

    pwd  显示远程的工作目录

    操作本地服务器

    lls   显示本地主机的列表

    lcd   切换本地的工作目录

    lpwd  查看本地目录信息

    上传下载文件参数

    get   --- 表示从远程服务器下载数据(单个文件)

    mget  --- 表示下载多个文件

    put   --- 表示从本地服务器上传数据(单个文件)

    mput  --- 表示上传多个文件

    查看帮助的方式:

    sftp> help       显示帮助信息

    1.11 ssh相关重点知识总结

     ssh协议:sshd---远程连接(sshd),sftp

     为加密的远程连接协议,相关软件有openssh.openssh---https。

     默认端口22

     协议版本1X和2.x,2.x更安全。了解SSH协议原理(ssh连接过程X

     服务端ssh远程连接服务,sftp服务。sshd守护进程,开机要自启动。

     ssh客户端包含ssh,scp,sftp命令。

     ssh安全验证方式:口令和密钥,这两种都是基于口令的,SSH密钥登录的原理。

     ssh服务安全优化,修改默认端口22,禁止root远程连接,禁止dns,SSH只监听内网IP

     ssh密钥对,公钥(publickey)在服务器端,比喻就是锁头,私钥(privatekey)在客户端,比喻就是钥匙。

     

     

     

    第2章 重点知识补充

    2.1 一个服务始终无法启动

    01.服务的查日志/系统日志

    02.检查服务端口有没有冲突

    2.2 【企业面试题】:给你一个端口如何命令行查出对应的服务是什么?

    测试服务端口有没有开启

    ss -lntup|grep 22

    netstat -lntup|grep -w "22"

    lsof -i:22

    grep  "\b22/\b" /etc/services

    nmap -p 22 172.16.1.41

    nc 172.16.1.41 22

    telnet 172.16.1.41 22

    2.2.1 【企业面试题】根据进程名查看对应的端口是什么?

    netstat/ss –lntup|grep 进程或服务名字

    2.3 ssh入侵案例说明

    被入侵实例http://phenixikki.blog.51cto.com/7572938/1546669

    IP何防止SSH登录入侵小结:

    1、用密钥登录,不用密码登陆

    2、牤牛阵法:解决SSH安全问题

    a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)

    b.开启 SSH 只监听本地内网 IP ( ListenAddress 172.16.1.61 )

    3、尽量不给服务器外网ip

    4、最小化(软件安装-授权)

    5、给系统的重要文件或命令做一个指纹

    6、给他锁上 chattr +i +a

    第3章 扩展问题

    3.1 服务端端口号变化了,如何基于秘钥连接

    3.1.1 环境准备

    实验环境:

    [root@test ~]# cat /etc/redhat-release

    CentOS release 6.9 (Final)

    将一台服务器的ssh服务端口修改为63389

    [root@test ~]# netstat -lntup|grep sshd

    tcp        0      0 0.0.0.0:63389  0.0.0.0:*         LISTEN      5083/sshd          

    tcp        0      0 :::63389         :::*              LISTEN      5083/sshd   

    3.1.2 通过另外一台服务器创建并分发密钥

    第一个里程碑: 现创建密钥使用 ssh-keygen

    [root@backup ~]# ssh-keygen -t rsa

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa):   #指定密钥对的保存路径

    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:

    72:48:65:1d:25:69:e1:4c:ae:2b:6f:a5:aa:70:96:1e root@backup

    The key's randomart image is:

    +--[ RSA 2048]----+     #2048表示加密的位数为2048位

    |        o.==.      |

    |       o =+.       |

    |      .  .+        |

    |     . . .         |

    |      o S           |

    |     . o ..        |

    |  . E . .o         |

    |   = . oo           |

    |    o..o.           |

    +-----------------+

    第二个里程碑:分发密钥,注意ssh的端口

    [root@backup ~]# ssh-copy-id  -i ~/.ssh/id_rsa.pub "-p63389 172.16.1.250"

    The authenticity of host '[172.16.1.250]:63389 ([172.16.1.250]:63389)' can't be established.

    RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '[172.16.1.250]:63389' (RSA) to the list of known hosts.

    root@172.16.1.250's password:

    Now try logging into the machine, with "ssh '-p63389 172.16.1.250'", and check in:

     

      .ssh/authorized_keys   #分发到对端服务器后进行改名

     

    to make sure we haven't added extra keys that you weren't expecting.

    说明:

       通过 man 手册找到密钥分发的命令格式。

       -i 参数指定 公钥文件的存放位置

    [use@]表示使用的用户,默认使用当前登陆的用户

    -p 指定端口,主要要在双引号之间(通过cat `which ssh-copy-id` 命令脚本内容得知)

    [root@backup ~]# man ssh-copy-id

    Formatting page, please wait...

    SSH-COPY-ID(1)                                                  SSH-COPY-ID(1)

    NAME

           ssh-copy-id  -  install  your  public  key in a remote machine's autho-

           rized_keys

    SYNOPSIS

    第三个里程碑: 测试密钥登陆

    [root@backup ~]# ssh 172.16.1.250 -p 63389

    Last login: Wed Oct 18 15:42:05 2017 from 10.0.0.41

    [root@test ~]#

    3.2 如何实现自动创建秘钥对,同时分发公钥(编写脚本实现)

    脚本内容:

    [root@m01 ~]# vim /server/scripts/piliang_fenfa.sh
      1 #!/bin/bash
      2
      3 #make key
      4 \rm -f /root/.ssh/id_dsa
      5 ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q
      6
      7 #fengfagongyao
      8 for ip in 8 31 41
      9 do
     10 echo ====fenfa key to host 172.16.1.$ip====
     11 sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"
     12 echo ===============fenfa end==============
     13 echo ""
     14 done

    脚本说明:

       ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q

       创建密钥,-f指定存放位置,-P 密钥加密的密码  -q 减少信息输出

    sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"

       这里需要安装一个软件 yum install sshpass -y 用来提供中户密码

    ssh-copy-id 命令来分发密钥 -i 指定密钥本地存放的路径

    -o StrictHostKeyChecking=no 在登陆其他服务器是不选择yes/no

    for ip in 8 31 41

       这里使用for循环来对ip地址进行变化。

    展开全文
  • SSH简介及两种远程登录的方法

    万次阅读 多人点赞 2018-11-12 16:33:45
    SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别的远程登录 SSH的高级应用 Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为...

    目录

    SSH的安全机制

    SSH的安装

    启动服务器的SSH服务

    SSH两种级别的远程登录

    SSH的高级应用


    Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。

    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY。

    SSH的安全机制

    SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。

    传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。

    但并不是说SSH就是绝对安全的,因为它本身提供两种级别的验证方法:

    第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人攻击”这种方式的攻击。

    第二种级别(基于密钥的安全验证):你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公钥加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私钥在本地解密再把它发送给服务器完成登录。与第一种级别相比,第二种级别不仅加密所有传输的数据,也不需要在网络上传送口令,因此安全性更高,可以有效防止中间人攻击。

    SSH的安装

    SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。

    dpkg -l | grep ssh

    如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。

    sudo apt-get install openssh-client 
    sudo apt-get install openssh-server 

    启动服务器的SSH服务

    首先确认ssh-server是否已经启动了

    ps -e | grep ssh

    如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:

    sudo /etc/init.d/ssh start 

    停止和重启ssh服务的命令如下:

    sudo /etc/init.d/ssh stop  #server停止ssh服务 
    sudo /etc/init.d/ssh restart  #server重启ssh服务
    

    接下来就可以进行使用客户机远程登录服务器了~

    SSH两种级别的远程登录

    一、口令登录

    口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址  eg:

    ssh ldz@192.168.0.1

    如果需要调用图形界面程序可以使用 -X 选项

    ssh -X ldz@192.168.0.1

    如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。

    ssh 192.168.0.1

    还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:

    ssh -p 1234 ldz@192.168.0.1

    客户机必须要知道服务器的ip地址。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址:

    如果是第一次登录远程主机,系统会给出下面提示:

    意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:FFobshqrGOachj7Xp4LsJ9+xkNBlyyOe8ZIPl7K+qQI,确定想要继续连接吗?

    输入yes即可。这时系统会提示远程主机被添加到已知主机列表。

     

    然后会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。

    我们可以通过 Ctrl+D 或者 exit 命令退出远程登录

     

    二、公钥登录

    每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。

    1、在本机生成密钥对

    使用ssh-keygen命令生成密钥对:

    ssh-keygen -t rsa   #-t表示类型选项,这里采用rsa加密算法

    然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa公钥文件 id_rsa.pub

    2、将公钥复制到远程主机中

    使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中

    ssh-copy-id ldz@192.168.0.1

    经过以上两个步骤,以后再登录这个远程主机就不用再输入密码了。

    cheers~

     

    SSH的高级应用

    使用远程主机不中断的跑程序

    当我们利用ssh在远程主机上跑程序的时候,只要关闭了终端就会中断ssh连接,然后远程主机上正在跑的程序或者服务就会自动停止运行。我们可以利用 nohup + 需要运行的程序 使运行的程序在切断ssh连接的时候仍然能够继续在远程主机中运行。nohup即no hang up(不挂起)。

    除此之外还有很多远程操作应用,包括 数据传输、端口操作(将不加密的网络连接绑定到ssh端口实现间接加密) 等等,可以参考柚子皮大神的博客:https://blog.csdn.net/pipisorry/article/details/52269785

     

     

     

    展开全文
  • 什么是SSH 以及常见的ssh 功能

    万次阅读 多人点赞 2018-06-28 18:02:54
    什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候...

    什么是SSH?

    简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

    中间人攻击
    SSH之所以能够保证安全,原因在于它采用了公钥加密。
    整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
    这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
    可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

    ssh的安装

    SSH分客户端openssh-client和openssh-server

    如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。

    Ubuntu缺省已经安装了ssh client。

    #配置ssh#

    echo -e "\033[31;1m ******************************* \033[0m"
    echo -e "\033[31;1m ************安装和配置ssh************ \033[0m"
    sudo apt-get install -y openssh-server 1> /dev/null
    sudo sed -i 's/UsePAM no/UsePAM yes/g' /etc/ssh/sshd_config
    sudo sed -i '8a /etc/init.d/ssh start' /etc/profile
    sudo /etc/init.d/ssh start
    ps -e | grep ssh

    echo -e "\033[31;1m ssh授权 \033[0m"
    cd ~/.ssh/
    ssh-keygen -t rsa
    cat ./id_rsa.pub >> ./authorized_keys

    $ ps -e|grep ssh
     2151 ?        00:00:00 ssh-agent

     5313 ?        00:00:00 sshd

    ssh-agent表示ssh-client启动,sshd表示ssh-server启动了。

    如果缺少sshd,说明ssh服务没有启动或者没有安装。

    皮皮blog



    SSH基本用法

    SSH远程登录

    口令登录

    假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
          $ ssh user@host  如:ssh pika@192.168.0.111
    如果本地用户名与远程用户名一致,登录时可以省略用户名。
          $ ssh host
    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
          $ ssh -p 2222 user@host
    上面这条命令表示,ssh直接连接远程主机的2222端口。
    如果你是第一次登录对方主机,系统会出现下面的提示:
          $ ssh user@host
          The authenticity of host 'host (12.18.429.21)' can't be established.
          RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
          Are you sure you want to continue connecting (yes/no)?
    这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
    所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
    很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
    假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
          Are you sure you want to continue connecting (yes/no)? yes
    系统会出现一句提示,表示host主机已经得到认可。
          Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
    然后,会要求输入密码。
          Password: (enter password)
    如果密码正确,就可以登录了。
    当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
    每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

    公钥登录

    使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
    所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
    这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
          $ ssh-keygen
    运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
    运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
    这时再输入下面的命令,将公钥传送到远程主机host上面:
          $ ssh-copy-id user@host
    好了,从此你再登录,就不需要输入密码了。
    如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
          RSAAuthentication yes
          PubkeyAuthentication yes
          AuthorizedKeysFile .ssh/authorized_keys
    然后,重启远程主机的ssh服务。
          // ubuntu系统
          service ssh restart
          // debian系统
          /etc/init.d/ssh restart
    authorized_keys文件
    远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
    这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:
          $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    这条命令由多个语句组成,依次分解开来看:(1)"$ ssh user@host",表示登录远程主机;(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;(4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
    写入authorized_keys文件后,公钥登录的设置就完成了。

    [SSH原理与运用(一):远程登录]

    使用ssh在远程后台不中断地跑程序

    Linux关闭ssh(关闭终端等)后运行的程序或者服务自动停止,如python3 a.py &。

    解决:使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。

    nohup python3 a.py &

    [linux进程管理与SELinux]

    皮皮blog


    SSH远程操作

    SSH数据传输

    SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。
          $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    单引号中间的部分,表示在远程主机上执行的操作;后面的输入重定向,表示数据通过SSH传向远程主机。
    这就是说,SSH可以在用户和远程主机之间,建立命令和数据的传输通道,因此很多事情都可以通过SSH来完成。
    下面看几个例子。
    【例1】
    将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录。
          $ cd && tar czv src | ssh user@host 'tar xz'
    【例2】
    将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
          $ ssh user@host 'tar cz src' | tar xzv
    【例3】
    查看远程主机是否运行进程httpd。
          $ ssh user@host 'ps ax | grep [h]ttpd'

    lz建议使用scp进行远程copy:

    scp 跨机远程拷贝

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

    scp命令参数

    • -1 强制scp命令使用协议ssh1
    • -2 强制scp命令使用协议ssh2
    • -4 强制scp命令只使用IPv4寻址
    • -6 强制scp命令只使用IPv6寻址
    • -B 使用批处理模式(传输过程中不询问传输口令或短语)
    • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    • -p 留原文件的修改时间,访问时间和访问权限。
    • -q 不显示传输进度条。
    • -r 递归复制整个目录。
    • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    • -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    • -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。
    • -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
    • -P port 注意是大写的P, port是指定数据传输用到的端口号
    • -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

    scp一般有六种使用方法
    本地复制远程文件:(把远程的文件复制到本地)
    scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz
    远程复制本地文件:(把本地的文件复制到远程主机上)
    scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz
    本地复制远程目录:(把远程的目录复制到本地)
    scp -r root@www.test.com:/val/test/ /val/test/
    远程复制本地目录:(把本地的目录复制到远程主机上)
    scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi
    pika:/media/pika/files/machine_learning/datasets$scp -r SocialNetworks/ piting@192.168.0.172:/media/data/pipi/datasets

    本地复制远程文件到指定目录:(把远程的文件复制到本地)
    scp root@www.test.com:/val/test/test.tar.gz /val/test/
    远程复制本地文件到指定目录:(把本地的文件复制到远程主机上)
    scp /val/test.tar.gz root@www.test.com:/val/

    ps: scp复制文件时只指定服务器地址不加路径默认复制到哪里???

    [12个scp传输文件的命令栗子]

    [scp 跨机远程拷贝]

    SSH端口操作

    绑定本地端口

    既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性
    假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
          $ ssh -D 8080 user@host
    SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。

    本地端口转发

    有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。
    假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
    我们在host1执行下面的命令:
          $ ssh -L 2121:host2:21 host3
    命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
    这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
          $ ftp localhost:2121
    "本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
    下面是一个比较有趣的例子。
          $ ssh -L 5900:localhost:5900 host3
    它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
    另一个例子是通过host3的端口转发,ssh登录host2。
          $ ssh -L 9001:host2:22 host3
    这时,只要ssh登录本机的9001端口,就相当于登录host2了。
          $ ssh -p 9001 localhost

    上面的-p参数表示指定登录端口。

    出错处理:ssh: Could not resolve hostname 192.168.*.*:***: Name or service not known

    解决:指定端口不能直接使用ip:端口号,使用-p参数来解决就可以了。

    远程端口转发

    既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发。
    还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?
    解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
    我们在host3执行下面的命令:
          $ ssh -R 2121:host2:21 host1
    R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
    绑定之后,我们在host1就可以连接host2了:
          $ ftp localhost:2121
    这里必须指出,"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。

    皮皮blog


    SSH的其他参数

    SSH还有一些别的参数,也值得介绍。
    N参数,表示只连接远程主机,不打开远程shell;T参数,表示不为这个连接分配TTY。这个两个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。
          $ ssh -NT -D 8080 host
    f参数,表示SSH连接成功后,转入后台运行。这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。
          $ ssh -f -D 8080 host
    要关闭这个后台连接,就只有用kill命令去杀掉进程。

    [SSH原理与运用(二):远程操作与端口转发]

    皮皮blog

    from: http://blog.csdn.net/pipisorry/article/details/52269785

    ref: [Ubuntu环境下SSH的安装及使用]

    [25个必须记住的SSH命令]*

    [Linux 下 SSH 命令实例指南]*

    [数字签名是什么?]

    [  * SSH, The Secure Shell: The Definitive Guide: 2.4. Authentication by Cryptographic Key, O'reilly

      * SSH, The Secure Shell: The Definitive Guide: 9.2. Port Forwarding, O'reilly

      * Shebang: Tips for Remote Unix Work (SSH, screen, and VNC)

      * brihatch: SSH Host Key Protection

      * brihatch: SSH User Identities

      * IBM developerWorks: 实战 SSH 端口转发

      * Jianing YANG:ssh隧道技术简介

      * WikiBooks: Internet Technologies/SSH

      * Buddhika Chamith: SSH Tunneling Explained

    ]

    展开全文
  • linux下面用ssh替代rsh

    2019-09-02 15:26:03
    ssh是个非常不错的东东,支持加密和压缩的数据传输,是替代rsh的一个非常不错的方案ssh是个非常不错的东东,支持加密和压缩的数据传输,是替代rsh的一个非常不错的方案下面是在oracle用户下面使用ssh来替代rsh的一个...
  • ssh免密码登录配置和rsh部署 ...ssh配置: 在old-mail03上root需要无密码登录到new-mail03 new-mail03上: mkdir/root/.ssh chmod700/root/.ssh cd/root/.ssh&&touchauthorized_keys&&chmod64...
  • ssh和rsh的区别

    千次阅读 2014-01-16 10:40:10
    ssh 和 rsh的区别主要有:  1 安全级别不同, 主要是ssh的密码等都是加密传输,而且还有密钥认证的机制, rsh明文传输. 而且没有密钥的机制. 具体,文章一大批  2 不用输入密码登录的方式不同. 在ssh中, 本地.ssh...
  • ssh和rsh的区别、Linux rsh命令

    千次阅读 2018-03-27 23:13:39
    见:https://blog.csdn.net/blackmanren/article/details/18352147http://www.runoob.com/linux/linux-comm-rsh.htmlssh 和 rsh的区别主要有: 1 安全级别不同, 主要是ssh的密码等都是加密传输,而且还有密钥认证的...
  • centos6.5 配置ssh与rsh

    千次阅读 2018-04-11 15:42:21
    VMware介绍VMware Workstation是一款著名的桌面虚拟计算机软件,提供了用户在单一的桌面上同时运行不同操作系统,和进行开发、测试、部署新的应用程序的最佳解决方案。VMware可在一台实体机上模拟完整的网络环境,...
  • linux下安装SSH服务及使用详解

    万次阅读 2019-04-28 10:40:41
    linux下安装SSH服务及使用详解 ssh服务介绍说明 secure shell protocol简称SSH,是由IETF网络工作小组(network working group) 制定,在进行数据传输之前,SSH先对联级数据包通过加密技术进行加密处理,加密后在进行数据...
  • ssh用法及命令

    万次阅读 多人点赞 2019-08-13 15:10:18
    什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的...
  • 一、什么是 SSH ?  SSH全称(Secure SHell)是一种网络协议,顾名思义就是非常安全的shell,主要用于计算机间加密传输。早期,互联网通信都是基于明文通信,一旦被截获,内容就暴露无遗。1995年,芬兰学者Tatu ...
  • ssh 远程登陆指定端口

    万次阅读 2017-07-26 17:21:05
    ssh 到指定端口 ssh -p xx user@ip  xx 为 端口号 user为用户名 ip为要登陆的ip SSH 原理及远程登录 http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html ...
  • 在终端ssh的断开方法

    万次阅读 多人点赞 2017-11-10 21:50:14
    在终端断开ssh连接而不关闭终端的方法:
  • SSH1和SSH2的区别

    万次阅读 2017-10-12 09:04:10
    SSH(Secure SHell)到目前为止有两个不兼容的版本——SSH1和SSH2。 SSH1又分为1.3和 1.5两个版本。SSH1采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥是通过非对称加密算法...
  • Ubuntu开启或重启ssh服务

    万次阅读 2017-11-16 22:56:17
    开启ssh服务首先需要安装打开ssh服务的库: sudo apt-get install openssh-server 检查当前的ssh开启情况: ps -e |grep ssh 如果有sshd,则ssh-server已经启动;若仅有agent,则尚未启动; 开启ssh服务: /etc/...
  • ssh指定端口连接

    万次阅读 2019-09-11 10:22:57
    ssh 到指定端口 ssh -p xx user@ip xx 为 端口号 user为用户名 ip为要登陆的ip
  • CentOS重启ssh服务命令

    万次阅读 2017-12-05 16:14:11
    CentOs 重启ssh服务的命令如下:# service sshd restart
  • Ubuntu安装和配置ssh教程

    万次阅读 2018-12-29 14:03:59
    安装ssh服务器 sudo apt install openssh-server 安装ssh客户端 sudo apt install openssh-client    配置ssh客户端,去掉PasswordAuthentication yes前面的#号,保存退出 su...
1 2 3 4 5 ... 20
收藏数 548,955
精华内容 219,582
关键字:

ssh