ssh命令详解


    目录

        前言

    一、ssh命令

        1、Ssh参数解释

        2、如何连接远程主机

        3、利用Xstart 在windos上连接linux桌面

        4、ssh客户端配置文件

    二、基于密钥认证登录

        1、在客户端生成密钥对

        2、把公钥文件传输至远程服务器对应用户的家目录

        3、查看已传输到远程主机上文件

        4、验证代理

    三、ssh端口转发

        什么是SSH端口转发?

        1、本地端口转发

        2、远程转发

        3、动态端口转发

        4、ssh服务器端配置文件

    四、ssh服务的最佳实践

前言

        Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。

        传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口

 令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器

的数据,然后再冒充用户把数据传给真正的服务器。而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH

协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

        SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为

FTP、POP、甚至为PPP提供一个安全的“通道”。 『维基百科』

一、ssh命令

    1、ssh参数解释

        格式;

ssh  [user@]host [command]

选项:

    -1:强制使用ssh协议版本1;

    -2:强制使用ssh协议版本2;

    -4:强制使用IPv4地址;

    -6:强制使用IPv6地址;

    -A:开启认证代理连接转发功能;

    -a:关闭认证代理连接转发功能;

    -b:使用本机指定地址作为对应连接的源ip地址;

    -C:请求压缩所有数据;

    -F:指定ssh指令的配置文件;

    -f:后台执行ssh指令;

    -g:允许远程主机连接主机的转发端口;

    -i:指定身份文件;

    -l:指定连接远程服务器登录用户名;

    -N:不执行远程指令;

    -o:指定配置选项;

    -p:指定远程服务器上的端口;

    -q:静默模式;

    -X:开启X11转发功能;

    -x:关闭X11转发功能;

    -y:开启信任X11转发功能。

  2、如何连接远程主机

[root@centos7_1 /]# ssh 172.16.252.16

                root@172.16.252.16's password: 

                Last login: Fri Dec  2 09:20:53 2016 from station16.magelinux.com

                [root@Centos6_1 ~]#

     3、利用Xstart 在windos上连接linux桌面 

Xstart (和xshell一样是Xmanager其中的一个组件)

ssh命令详解_ssh端口转发

            选择第7项 GNOME

ssh命令详解_ssh_02

ssh命令详解_ssh端口转发_03

ssh命令详解_ssh-keygen_04

            输入密码即可

    4、ssh客户端配置文件

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

   /ect/ssh/sshd_config  是服务器端配置文件

二、基于密钥认证登录

    1、在客户端生成密钥对

  1. [root@Centos6_1 .ssh]# ssh-keygen   #默认使用rsa加密
  2.     Generating public/private rsa key pair.
  3.     Enter file in which to save the key (/root/.ssh/id_rsa):   
  4.     Enter passphrase (empty for no passphrase): #输入私钥密码(当然也可以不输入的)
  5.     Enter same passphrase again: 
  6.     Your identification has been saved in /root/.ssh/id_rsa.
  7.     Your public key has been saved in /root/.ssh/id_rsa.pub.
  8.     The key fingerprint is:
  9.     e5:14:2b:ff:7c:ed:52:a1:0f:4a:3c:b0:a8:4b:c0:b8 root@Centos6_1
  10.     The key's randomart p_w_picpath is:
  11.     +--[ RSA 2048]----+
  12.     |          .      |
  13.     |           o     |
  14.     |        . +      |
  15.     |  o      B     . |
  16.     | . o    S *   . .|
  17.     |  . .  . . * o ..|
  18.     | E   ..   . = +..|
  19.     |    ..     . ..o |
  20.     |     ..        ..|
  21.     +-----------------+

    2、把公钥文件传输至远程服务器对应用户的家目录

  ssh-copy-id id_rsa.pub root@172.16.250.240

    3、查看已传输到远程主机上文件

  1.    [root@centos7_1 .ssh]# ls
  2.    authorized_keys  known_hosts

        authorized_keys  这个文件就是刚刚传输的文件至于为什么名字变了这就是ssh-copy-id的原因了,如果用scp来传文件的是不会出现这种效果的这也是为什么刚刚用ssh-copy-id这条命令的原因,这条命令是专门为ssh设定的,具体的内容可以自己查询。

        如果从其他方式将公钥拷贝到该目录下,只需将公钥中内容复制到authorized_keys中即可。

    4、验证代理

  1.  由于设置了私钥密码在登录远程服务器时还是要输入密码(私钥密码)
  2.  [root@Centos6_1 .ssh]# ssh 172.16.250.240
  3.  Enter passphrase for key '/root/.ssh/id_rsa'
  4.  Last login: Thu Dec  1 16:43:58 2016 from station16.magelinux.com
  5.   [root@centos7_1 ~]#
  6.   如果开启代理的话,则只需要输入一次密码
  7.   [root@Centos6_1 .ssh]# ssh-agent bash
  8.   [root@Centos6_1 .ssh]# ssh-add 
  9.   Enter passphrase for /root/.ssh/id_rsa: 
  10.   Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa) #私钥密码
  11.   [root@Centos6_1 .ssh]# ssh 172.16.250.240
  12.   Last login: Thu Dec  1 16:50:08 2016 from 172.16.252.16
  13.   [root@centos7_1 ~]#

这样以后在登陆的时候就不用输入密码了。

三、ssh端口转发

    什么是SSH端口转发?

        SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来

转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”( tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安

全的通道来进行传输而得名。例如, Telnet, SMTP, LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传

输。而与此同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 

进行通讯。

    SSH 端口转发能够提供两大功能:

    加密 SSH Client 端至 SSH Server 端之间的通讯数据

    突破防火墙的限制完成一些之前无法建立的 TCP 连接

    1、本地端口转发

     

ssh命令详解_ssh端口转发_05

主机A 地址 172.16.250.90/16

主机B 地址 172.16.33.166/16

主机C 地址 172.16.250.240/16 (mysql 服务器)

        以上有主机A、B、C三台服务器现在A要求访问C的mysql服务但是因为各种原因暂时无法访问(你可以把它理解为三台主机并联不同

网段,由于我是实验环境所有没有设置不同网段所以各位见谅),但现在主机B可以访问,要求利用ssh的端口转发实现(iptables端口映射

也是可以实现的。)

    注意:在做下面的实验时请把防火墙关掉(当然你如果不怕麻烦又可以自己配置iptables则另当别论)。

        在主机A上执行以下命令:

        sshl  -L  13306:172.16.250.240:3306 root@172.16.33.166 

        以上命令的意思是绑定本地(主机A)的13306端口,然后指定主机B将所有的数据转发到目的主机C的3306端口。(如上命令只能是

绑定主机A的环回地址)。

    如果此时远程连接主机A的windows主机想连接主机C的mysql服务如下图所示:

        

ssh命令详解_ssh_06

Windows 主机地址 172.16.251.16

        则在主机A执行以下命令:

ssh –L 172.16.250.90:13306:172.16.250.16:3306 root@172.16.33.166 

        此时windows主机即可访问主机C的mysql服务。

    2、远程转发

        还是看上面的例子,如果此时主机B是一台内网地址,主机B可以连接主机A,相反主机A却不能连接主机B,所以此时本地端口转发就

不能用了。

    解决办法是,主机B主可以连接主机A如此先让主机B连接主机A,在让主机A利用这条连接去做端口转发,便可以实现主机A连接主机C。

在主机B上执行以下命令:

ssh –R 13306:172.16.250.16:3306 172.16.250.90 

以上命令R参数接收3个值,分别为远程主机端口:目标主机:目标主机端口。意思是让主机A监听它的13306端口,然后所有数据进

    过主机B转发到主机C的3306端口,对于主机B来说主机A为远程端口,所以此种方法被称为“远程端口转发”

    3、动态端口转发

    假设此时需要×××访问facebook等网站,但现在没有好的×××软件恰巧你有一台国外的虚拟主机主机B此时只需在主机A上做一个动态

端口转发即可

        在主机A上执行以下命令

ssh –D 8080 root@172.16.250.240 (这个端口是绑定在环回地址的也就是127.0.0.1,如果想绑定本机ip则使用下面命令)

ssh -D ip:port root@172.16.250.240    (240这个ip为你国外虚拟主机地址) 

     此时只需在浏览器中配置主机A的ip地址为代理服务器则即可访问facebook。

    4、ssh服务器端配置文件

        配置文件 /ect/ssh/sshd_config

   常用参数:

    Port  # 可修改ssh访问端口

    ListenAddress ip   #监听IP

    PermitRootLogin yes  #是否允许ssh远程登录root帐号

    ClientAliveInterval 0   #客户端连接数

    UseDNS yes#DNS解析

    限制可登录用户的办法:

    AllowUsers user1 user2 user3    #允许ssh登录用户

    DenyUsers#禁止ssh登陆用户

    AllowGroups#允许ssh登录用户组

    DenyGroups##禁止ssh登陆用户组

四、ssh服务的最佳实践

         1、不要使用默认端口

         2、禁止使用protocol version 1

         3、限制可登录用户

         4、设定空闲会话超时时长

         5、利用防火墙设置ssh访问策略

         6、仅监听特定的IP地址

         7、基于口令认证时,使用强密码策略

            tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs

         8、使用基于密钥的认证

         9、禁止使用空密码

        10、禁止root用户直接登录

        11、限制ssh的访问频度和并发在线数

        12、做好日志,经常分析