远程登录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的密钥对可以输入如下命令:

[[email protected] ~]# 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 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        .        |
|       . .       |
|        S        |
|       .o.       |
|       o+oE.     |
|       [email protected]= .   |
|        ==%o+o.  |
+-----------------+
[[email protected] ~]# ls .ssh/
id_rsa  id_rsa.pub  known_hosts
[[email protected] ~]# 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命令在输入刚才生成私钥的密码就能登录远程主机了。

[[email protected] ~]# touch .ssh/authorized_keys  //提起创建好保存公钥的文件
[[email protected] ~]# chmod 600 .ssh/authorized_keys   //保证不让别人看见
[[email protected] ~]# 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.

[[email protected] ~]# 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 ....  [email protected]:/path/to/somewhere

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

scp [email protected]:/path/to/somefile /path/to/somewhere

常用的命令选项有以下:

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

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

-q:静默模式

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

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

[[email protected] ~]# 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
[[email protected] ~]# 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目录,查看时间戳是否改变。
[[email protected] ~]# 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支持此协议,具体查看如下:

[[email protected] ~]# 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目录下:

[[email protected] ~]# 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
[[email protected] ~]# tail -2 /tmp/passwd 
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
[[email protected] ~]# 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
                         #记录好日志,经常做日志分析。

时间: 2024-08-06 20:08:47

远程登录linux的工具OpenSSH的相关文章

13.远程登录 Linux

实验要求: 1. 使用远程登录工具PuTTY登录Linux虚拟机. 2. 使用VNC服务登录Linux虚拟机. 实验器材: 软件: 1. 安装了RHEL6的vmware虚拟机. 2. PuTTY远程登录工具. 3. VNC服务器安装包: tigervnc-server-1.0.90-0.17.20110314svn4359.el6.i686.rpm. 硬件: PC机 背景知识: 1. Linux远程登录: Linux 大多应用与服务器,而服务器不可能像 PC 一样放在办公室,它们是放在服务器机房

xshell 使用密钥验证远程登录linux

使用xshell做密钥验证远程登录linux: 我这里用的工具:xshell 5 及 centos 6.5 首先在工具栏选择新建用户密钥生成向导,进行密钥对生成操作 下一步 生成公钥对,下一步 这里也可以直接点"完成",这里选"下一步"(原因看下一张图) 选中公钥复制,保留,或者保存为文件,后面要用到 在服务器端,保存公钥到服务器,修改相关文件 [[email protected] ~]# mkdir .ssh [[email protected] ~]# vim

搭建高性能计算环境(二)、远程登录Linux服务器

一般操作Linux系统都是通过远程登录使用的,本节介绍几种远程登录Linux.上传下载文件的工具. 1. Secure Shell SSH 简单方便.既能使用命令行登陆也能传文件,免费. 打开SSH Secure Shell Client程序就能打开软件界面,点击Quick Connect输入远程Linux系统的ip地址.用户名 点Connect输入密码(第一次登陆会提示ssh的key认证,选择Yes) 登陆系统成功,可以在Add profile中将信息记住,去一个好记的名字,以后直接在Prof

远程登录Linux

Linux远程登录 Linux系统中是通过ssh服务实现的远程登录功能.默认ssh服务开启了22端口,而且在安装完成系统时,这个服务已经安装,并且是开机启动的.所以不需要额外配置就能直接远程登录Linux系统. 在windows操作系统中,可以选择两款比较简单的远程登录工具,PuTTY和VNC: PuTTY是windows登录Linux终端的工具(不是图形化界面),登录的是字符界面. VNC(Vittual Network Computing)是虚拟网络计算机的缩写,是一款可以图形化登录Linu

Windows远程登录Linux

本文以Ubuntu Kylin1404为例,说明如何通过Windows远程登录Linux. 首先,要确保Ubuntu上SSH服务执行正常.默认情况下,Ubuntu已装有SSHclient.比方输入ssh localhost时,终端会提示无法建立连接,或请输入password.这说明已安装有sshclient.为了开启服务.必须自己在终端中输入sudo apt-get install openssh-server来安装服务端. 安装完毕后.默认已开启了ssh服务. 在Windows系统中.假设选取

004嵌入式童年之远程登录Linux系统

通过windows主机远程登录Linux主机 前提一:从windows能ping通Linux 前提二:关闭Linux防火墙,运行命令:/etc/init.d/iptables stop (1)使用Putty,运行软件,输入IP地址(在Linux系统中通过ifconfig命令查询的eth0的IP地址),协议选择SSH,然后点击打开: 打开之后,输入用户名和密码,就可以成功连接了: (2)如果想看到图形化的界面,可以使用VNC: ①在Linux系统中安装tigervnc-server-1.0.90-

ssh远程登录linux live系统

要想ssh远程登录,需要准备两件事:配置同网段IP和开启SSH服务. 由于live系统没有IP,所以首先需要配置IP. 我的live系统是在虚拟机上启动的,宿主IP为192.168.230.1,live系统的IP我设置为192.168.230.180: #ifconfig eth0 192.168.230.180 然后在SecurityCRT上连接live系统,输入密码时发现live系统也没有用户密码.这时候若不输密码或者随便输入一个密码,SecurityCRT也是不让连接的.所以需要在live

java应用程序远程登录linux并执行其命令(ssh jar包)

http://www.ganymed.ethz.ch/ssh2/在这个网址下载一个调用ssh和scp命令的jar包. 然后,就可以写程序了.将上面的jar包导入MyEclipse,下面是一个类的实例代码. package hh; import java.io.BufferedReader;     import java.io.IOException;     import java.io.InputStream;    import java.io.InputStreamReader; imp

Xmanger远程登录Linux服务器

环境介绍 服务器端:Centos 6.4 客户端:Windows 7 服务器端配置 将系统默认启动模式设置为图形模式,配置文件/etc/inittab文件内容调整如下: # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do