远程登录linux的工具OpenSSH

一、SSH简介

        SSH(Secure Shell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH。

SSH作用:用户通过SSH可以把所有传输的数据进行加密,使“中间人”的攻击方式不可能实现,而且也能够防止DNS和IP欺骗。它还有一个额外的好处是传输的数据是经过压缩的,可以加快传输的速度。SSH作用广泛,既可以代替Telnet,又可以为FTP、POP,甚至为PPP提供一个安全的“通道”。SSH协议在预设的状态中,提供两个服务器功能:一个是类似Telnet的远程联机使用Shell服务器,即俗称SSH功能;另一个是类似FTP服务的SFTP-Server功能,可提供更安全的FTP服务。


二、基于密钥安全认证的工作原理

  基于密匙的安全验证需要依靠密匙,即用户必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用密匙进行安全验证。服务器收到请求之后,先在该服务器的home目录下寻找公用密匙,然后把它和发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge),并把它发送给客户端软件。客户端软件收到“质询”后,就可以用私人密匙解密再把它发送给服务器。使用这种方式,用户必须知道自己密匙的口令。与第一种级别相比,这种级别不需要在网络上传送口令,不仅加密所有传送的数据,而且阻止了“中间人”攻击方式。


三、OpenSSH

        OpenSSH的英文全称是Open Secure Shell,即开源SSH,是一个免费、开源的并集远程管理、远程数据传输于一身的管理工具。其工作原理基本和前面所介绍的一致,由于OpenSSH是基于C/S架构的所以在yum安装时要同时安装以下安装包:openssh-server、openssh以及openssh-clients,用来避免由于软件包的未安装导致服务端与客户端双向通信错误。

         

1、基于OpenSSH的密钥认证登录远程主机

首先使用ssh-keygen命令来生成密钥对,比如要用RSA加密算法生成一个4096Bit的密钥对可以输入如下命令:

[root@hpf-linux ~]# ssh-keygen -t rsa -b 4096
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:
b4:b6:76:9f:af:9a:9c:b9:b0:db:d8:96:60:9e:ef:58 root@hpf-linux
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        .        |
|       . .       |
|        S        |
|       .o.       |
|       o+oE.     |
|       .o@o= .   |
|        ==%o+o.  |
+-----------------+
[root@hpf-linux ~]# ls .ssh/
id_rsa  id_rsa.pub  known_hosts
[root@hpf-linux ~]# ls .ssh/id_rsa -l
-rw------- 1 root root 1743 7月  31 00:47 .ssh/id_rsa

然后进行密钥的分发:刚才生成了一对密钥,为保证安全把私钥放在自己的机器上的~/.ssh/目录下并保证访问权限是“-rw-------”(即600)。同时提前在远程主机上所需要登录用户家目录下的 .ssh/目录中建立authorized_keys文件,在用ssh-copy-id+远程主机上的用户@IP命令把自己刚才所生成的公钥同步到远程主机的authorized_keys文件中,最后就可以用ssh+远程IP命令在输入刚才生成私钥的密码就能登录远程主机了。

[root@webserver ~]# touch .ssh/authorized_keys  //提起创建好保存公钥的文件
[root@webserver ~]# chmod 600 .ssh/authorized_keys   //保证不让别人看见
[root@hpf-linux ~]# ssh-copy-id    //将本机的公钥复制到服务端,需提前在服务端创建authorized_keys文件
[email protected]'s password:  (这是远端服务器的密码,输完这次之后今后用密钥认证就不用在输入)
Now try logging into the machine, with "ssh '[email protected]'", and check in:

  .ssh/authorized_keys

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

[root@hpf-linux ~]# ssh 192.168.1.20
Enter passphrase for key '/root/.ssh/id_rsa':     (这是我在生成密钥时在私钥上设置的密码,若闲麻烦可以不用)
Last login: Fri Jul 31 02:26:36 2015 from 192.168.1.8

        在使用ssh命令登录远程主机时由于ssh登录远程主机的默认端口为22,在生产环境中是不会使用此端口进行通信的,所以若知道远程主机端口已被更改可以使用-p +更改后的端口进行登录。


2、scp命令应用

此命令类似于cp命令,是基于ssh协议跨主机复制的命令,其应用分为以下两种:

  • 源文件在本机,目标为远程:

                scp /path/to/somefile ....  Username@HOST:/path/to/somewhere

  • 源文件在远程,目标在本机:

                scp Username@HOST:/path/to/somefile /path/to/somewhere


常用的命令选项有以下:

         -r:当源文件为目录,以实现递归复制

         -p:保留源文件的复制及修改时间戳,以及权限

         -q:静默模式

         -P:PORT:指定服务器端口


应用举例,把本机的shell目录复制到远程主机192.168.1.20上,并保留时间戳:

[root@hpf-linux ~]# stat shell
  File: "shell"
  Size: 4096      	Blocks: 8          IO Block: 4096   目录
Device: 805h/2053d	Inode: 392467      Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-31 21:23:33.684000145 +0800
Modify: 2015-07-31 21:22:59.033982958 +0800
Change: 2015-07-31 21:22:59.033982958 +0800
[root@hpf-linux ~]# scp -rp shell 192.168.1.20:/root
Enter passphrase for key '/root/.ssh/id_rsa': 
cpcom.sh                                      100%  483     0.5KB/s   00:00    
cpcmd.sh                                      100%  500     0.5KB/s   00:00    
jingxiang.sh                                  100% 3249     3.2KB/s   00:00  
下面检查同步到远程主机的shelll目录,查看时间戳是否改变。
[root@webserver ~]# stat shell
  File: "shell"
  Size: 4096      	Blocks: 8          IO Block: 4096   目录
Device: 805h/2053d	Inode: 534359      Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-31 21:23:33.000000000 +0800
Modify: 2015-07-31 21:22:59.000000000 +0800
Change: 2015-07-31 21:23:33.166006257 +0800


3、sftp命令的使用

此命令是基于ssh的ftp协议,在使用前要确保远程主机的ssh支持此协议,具体查看如下:

[root@webserver ~]# tail -5 /etc/ssh/sshd_config 
#Banner none

# override default of no subsystems
Subsystem	sftp	/usr/libexec/openssh/sftp-server   //远程主机必须有此配置选项


应用举例,用sftp命令到远程主机192.168.1.20,然后将远程主机上的passwd文件下载到指定的本机/tmp目录下:

[root@hpf-linux ~]# sftp 192.168.1.20
Connecting to 192.168.1.20...
Enter passphrase for key '/root/.ssh/id_rsa': 
sftp> ls
anaconda-ks.cfg                         install.log                             
install.log.syslog                      lvm2-2.02.111-2.el6_6.1.i686.rpm        
shell                                   
sftp> cd /etc    //到远程主机的etc目录下
sftp> pwd
Remote working directory: /etc
sftp> lcd /tmp  //将下载到的地址改为tmp目录
sftp> get passwd  
Fetching /etc/passwd to passwd
/etc/passwd                                   100% 1265     1.2KB/s   00:00    
sftp> bye
[root@hpf-linux ~]# tail -2 /tmp/passwd 
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
[root@hpf-linux ~]# tail -2 /etc/passwd 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mockbuild:x:500:500::/home/mockbuild:/bin/bash

用sftp命令进入远程主机进行操作还有很多,这里只是简单的下载上传的使用,若要继续深入可自行查看帮助文档。


四、OpenSSH的服务器端sshd配置文件说明

 1、OpenSSH相关常用文件:

   配置文件 /etc/ssh/sshd_config

   服务脚本 /etc/rc.d/init.d/sshd

   脚本配置文件:/etc/sysconfig/sshd


2、/etc/ssh/sshd_config文件内常用配置说明:   

       ListernAddress   当前主机的监听地址
       Protocol 协议版本 ,默认配置为2,不建议使用1
       # HostKeys for protocol version 2      若启用协议版本2则使用下面两个相关配置
       #HostKey /etc/ssh/ssh_host_rsa_key     验证主机的公钥
       #HostKey /etc/ssh/ssh_host_dsa_key     验证主机的公钥
       #KeyRegenerationInterval 1h            密钥的使用时间
       #ServerKeyBits 1024           密钥长度
       #LogLevel INFO                日志级别
       #LoginGraceTime 2m            登陆宽限期
       #PermitRootLogin yes          root是否可以登录 ,若改为no则root用户不能登录
       #StrictModes yes              严格模式,家目录 属主 属组
       #MaxAuthTries 6               最多可以承受链接出错的次数
       #MaxSessions 10               最大的连接数     
       PasswordAuthentication yes    是否使用用户名和密码的方式
       Kerberos  options             集中认证管理 选项该文本下面是配置的相关信息
       X11Forwarding yes             是否转发图形窗口
 
一般最好可以在配置文件下面添加以下关于用户登录的限制信息:
      AllowUsers user1 user2         用户白名单       
      Allowgroups                    组白名单
      DenyUser                       用户黑名单


3、关于ssh的最佳实践

1)only use ssh protocol 2     #仅使用协议2

2)limit users SSh access        #限定访问ssh服务的用户 

 Allowusers root vivek jerry

 白名单

 denyUser saroj anjali foo

 黑名单

3)configure  Idle Log out timeout Interval   #配置空闲超时长。

 ClientAliveCountMax 300         

 ClientAliveInterval  0

4)Firwall SSH Port # 22       #使用iptables设置ssh服务安全访问策略

5)change ssh port and Limit IP binding  #勿使用默认22端口

 port 300

 Listaddress 192.168.1.5

 ListenAddress 202.54.1.5

6)use Strong SSH passwords and passphrase   #使用足够长足够复杂的密码,且定期更换。

 下面是生成密码的小脚本:

genpasswd(){

  local 1=$1

   [ "$1" == "" ]&& 1=20

   tr -dc A-Za-z0-9_</dev/urandom | head -c ${1} | xargs

 }

7)use Public key Based AUthentication    #使用公钥认证。

8)disable Empty password               #禁止空密码登录

9)thwart ssh crakers (Brute  Force attack)       #使用前提前用黑客工具测试能否破解

google:ssh best practice

10)rate-limit incoming port # 22 COnnections    #限制ssh访问频度

11)use log analyzer                          #记录好日志,经常做日志分析。


你可能感兴趣的:(ssh,scp,sftp,openssh)