ssh服务介绍

ssh服务介绍,第1张

SSH是Secure Shell Protocol的简写。在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。

SSH是专为远程登陆会话和其他网络服务提供的安全性协议。利用SSH协议可以有效的防止远程管理过程中的信息泄漏问题。

在默认状态下,SSH服务主要提供两个服务功能;一个是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务:另一个类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务 提醒SSH客户端(ssh命令)还包含一个很有用的远程安全拷贝命令scp,也是通过ssh协议工作的

小结:

1)SSH是安全的加密协议,用于远程连接Linux服务器。

2)SSH默认的端口是22,安全协议版本是SSH2,除了2还有ssh1有漏洞

3)SSH服务器端主要包含两个服务器功能SSH远程连接,SFTP服务。

4)Linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令等。

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

Port 52114 (ssh默认连接端口是22 修改他)

PermitRootLogin no(禁止远程root登陆)

PermitEmptyPasswords no(禁止空密码的登陆)

UseDNS no(不适用DNS)

ListenAddress 172.16.1.61:22 (只监听内网IP 可以加端口号)

在远程管理linux系统基本上都要使用到ssh,原因很简单:telnet、FTP等传输方式是‍以明文传送用户认证信息,本质上是不安全的,存在被网络窃听的危险。SSH(Secure Shell)目前较可靠,是专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。

ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。下面列出来的是两个配置文件中最重要的一些关键词,每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的。

‍‍1、编辑 /etc/ssh/ssh_config 文件

Site-wide defaults for various options

Host *

ForwardAgent no

ForwardX11 no

RhostsAuthentication no

RhostsRSAAuthentication no

‍RSAAuthentication yes

PasswordAuthentication yes

FallBackToRsh no

UseRsh no

BatchMode no

CheckHostIP yes

StrictHostKeyChecking no

IdentityFile ~/.ssh/identity

Port 22

Cipher blowfish

EscapeChar ~

下面对上述选项参数逐进行解释:

Site-wide defaults for various options

带“#”表示该句为注释不起作,该句不属于配置文件原文,意在说明下面选项均为系统初始默认的选项。说明一下,实际配置文件中也有很多选项前面加有“#”注释,虽然表示不起作用,其实是说明此为系统默认的初始化设置。

Host *

"Host"只对匹配后面字串的计算机有效,“ ”表示所有的计算机。从该项格式前置一些可以看出,这是一个类似于全局的选项,表示下面缩进的选项都适用于该设置,可以指定某计算机替换 号使下面选项只针对该算机器生效。

ForwardAgent no

"ForwardAgent"设置连接是否经过验证代理(如果存在)转发给远程计算机。

ForwardX11 no

"ForwardX11"设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。

RhostsAuthentication no

"RhostsAuthentication"设置是否使用基于rhosts的安全验证。

RhostsRSAAuthentication no

"RhostsRSAAuthentication"设置是否使用用RSA算法的基于rhosts的安全验证。

RSAAuthentication yes

"RSAAuthentication"设置是否使用RSA算法进行安全验证。

PasswordAuthentication yes

"PasswordAuthentication"设置是否使用口令验证。

FallBackToRsh no

"FallBackToRsh"设置如果用ssh连接出现错误是否自动使用rsh,由于rsh并不安全,所以此选项应当设置为"no"。

UseRsh no

"UseRsh"设置是否在这台计算机上使用"rlogin/rsh",原因同上,设为"no"。

BatchMode no

"BatchMode":批处理模式,一般设为"no";如果设为"yes",交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。

CheckHostIP yes

"CheckHostIP"设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为"yes"。

StrictHostKeyChecking no

"StrictHostKeyChecking"如果设为"yes",ssh将不会自动把计算机的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接。

IdentityFile ~/.ssh/identity

"IdentityFile"设置读取用户的RSA安全验证标识。

Port 22

"Port"设置连接到远程主机的端口,ssh默认端口为22。

Cipher blowfish

“Cipher”设置加密用的密钥,blowfish可以自己随意设置。

EscapeChar ~

“EscapeChar”设置escape字符。

2、编辑 /etc/ssh/sshd_config 文件:‍

This is ssh server systemwide configuration file.

Port 22

ListenAddress 192.168.1.1

HostKey /etc/ssh/ssh_host_key

ServerKeyBits 1024

LoginGraceTime 600

KeyRegenerationInterval 3600

PermitRootLogin no

IgnoreRhosts yes

IgnoreUserKnownHosts yes

StrictModes yes

X11Forwarding no

PrintMotd yes

SyslogFacility AUTH

LogLevel INFO

RhostsAuthentication no

RhostsRSAAuthentication no

RSAAuthentication yes

PasswordAuthentication yes

PermitEmptyPasswords no

AllowUsers admin

‍下面逐行说明上面的选项设置:

Port 22

"Port"设置sshd监听的端口号。

ListenAddress 192.168.1.1

"ListenAddress”设置sshd服务器绑定的IP地址。

HostKey /etc/ssh/ssh_host_key

"HostKey”设置包含计算机私人密匙的文件。

ServerKeyBits 1024

"ServerKeyBits”定义服务器密匙的位数。

LoginGraceTime 600

"LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。

KeyRegenerationInterval 3600

"KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。

PermitRootLogin no

"PermitRootLogin”设置是否允许root通过ssh登录。这个选项从安全角度来讲应设成"no"。

IgnoreRhosts yes

"IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。

IgnoreUserKnownHosts yes

"IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的"$HOME/.ssh/known_hosts”

StrictModes yes

"StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。

X11Forwarding no

"X11Forwarding”设置是否允许X11转发。

PrintMotd yes

"PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。

SyslogFacility AUTH

"SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。

LogLevel INFO

"LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。

RhostsAuthentication no

"RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。

RhostsRSAAuthentication no

"RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。

RSAAuthentication yes

"RSAAuthentication”设置是否允许只有RSA安全验证。

PasswordAuthentication yes

"PasswordAuthentication”设置是否允许口令验证。

PermitEmptyPasswords no

"PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。

AllowUsers admin

"AllowUsers”的后面可以跟任意的数量的用户名的匹配串,这些字符串用空格隔开。主机名可以是域名或IP地址。

通常情况下我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。

1)执行命令生成私钥和公钥 ssh-keygen -t dsa 如图:

3)我们切换过去就不需要密码了 如图

在我们日常管理与维护服务器个过程中,我们都需要使用远程连接工具,今天我们就一同来总结下Linux常用的安全远程连接工具-OpenSSH。

【远程登录协议】

1、telnet:是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主

机工作的能力。默认使用的是TCP的23号端口,采用C/S架构,在用户登录的过程中传输的信息都是明文信息,安全无法保障,所以不建议用telnet。

2、ssh:为Secure Shell 的缩写,由IETF的网络工作小组所制定;SSH

为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH

协议可以有效防止远程管理过程中的信息泄露问题。默认使用的是TCP的22号端口,也是基于C/S架构,SSH有两个版本v1与v2。

sshv1:基于CRC-32做MAC(消息摘要认证),不安全,强烈建议不使用;

sshv2:基于双方主机的协商选择使用最安全的MAC方式 ,其有如下特点:1、加密机制及MAC机制由双方协商选定;2、基于DH实现密钥交换,基于RSA或DSA实现身份认证;3、客户端通过检查服务器端的主机密钥来判断是否能够继续通信;

【OpenSSH简述】

OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为rlogin、rsh

rcp以及telnet的直接替代品使用。更进一步,其他任何TCP/IP连接都可以通过SSH安全地进行隧道/转发。OpenSSH

对所有的传输进行加密,从而有效地阻止了窃听、连接劫持,以及其他网络级的攻击。OpenSSH 由 OpenBSD project 维护。

登录过程和使用rlogin或telnet建立的会话非常类似。在连接时,SSH

会利用一个密钥指纹系统来验证服务器的真实性。只有在第一次连接时,用户会被要求输入yes进行确认,之后的连接将会验证预先保存下来的密钥指纹。如果保

存的指纹与登录时接收到的不符, 则将会给出警告。 指纹保存在 ~/.ssh/known_hosts中,对于SSHv2指纹,则是

~/.ssh/known_hosts2。

默认情况下,较新版本的OpenSSH只接受SSHv2连接。如果能用版本2则客户程序会自动使用,否则它会返回使用版本1的模式。此外,也可以通

过命令行参数-1或-2来相应地强制使用版本1或2。 保持客户端的版本1能力是为了考虑较早版本的兼容性,建议尽量使用版本2。

【SSH服务器和客户端工作流程】

OpenSSH使用C/S架构:

服务端工具(S):sshd

客户端工具(C):ssh命令、putty、xshell、securecrt、sshshellclient;

【OpenSSH客户端组件-ssh】

配置文本:/etc/ssh/ssh_config

使用方法:

ssh [username@] host [COMMAND]或 ssh -l username host [COMMAND]

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

-l username:指定登录远程主机的用户,不指定则使用当前用户;

username@:等同于 -l username

如果设置了COMMAND,表示使用username账户登录远程主机执行一次指定的命令并返回结果,不会停留在远程主机上;

[root@www ~]# ssh 192.168.0.110 #使用root用户登录;

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

RSA key fingerprint is 01:2e:43:cc:bc:1d:f1:e5:f0:f4:89:78:74:a9:49:44.

Are you sure you want to continue connecting (yes/no)? yes #第一次连接,需手动进行确认;

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

[email protected]'s password: #输入远程主机root账户的密码;

Last login: Mon May 11 16:44:52 2015 from 192.168.0.104

[root@mailCentOS6 ~]# #登录成功了,远程主机名为mailCentOS6;

[root@mailCentOS6 ~]# ls #显示远程主机root家目录下的文件;

2.sh boot.iso install.log sdb.mbr test1

anaconda-ks.cfg crontab install.log.syslog \temp\test

[root@mailCentOS6 ~]# exit #退出登录;

logout

Connection to 192.168.0.110 closed.

[root@www ~]# ssh [email protected] ls #使用root登录远程主机,执行一次ls命令,返回结果便退出;

[email protected]'s password: #第二次连接,就不需要输入yes了,直接输入密码即可;

2.sh

anaconda-ks.cfg

boot.iso

crontab

install.log

install.log.syslog

sdb.mbr

\temp\test

test1

[root@www ~]# #看到了吗,我们当前并没有登录在远程主机;

【OpenSSH服务器端组件-sshd】

配置文件:/etc/ssh/sshd_config(通过修改此文件可以修改ssh的默认监听端口与其他参数)

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

服务启动|停止|重启:serveice sshd start|stop|restart

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

配置参数

# man sshd_config 查看配置参数的说明;

# vim /etc/sysconfig/sshd 通过编辑配置文件来修改配置参数;

#+空格+文字:以此格式开头的行表示改行为注释说明;

#+文字:以此格式开头的行表示可启用选项,不改变则表示使用该选项的默认设置,反之使用设定值“#”要去掉哦!

例:#Port 22 如不去掉#且22不变,表示使用默认的22号端口;

若把#Port 22改成port 7777,表示把sshd的监听端口改成7777;

注意:修改参数与配置后,必须重启服务(service sshd restart).

经常需要修改的参数:

[root@www ~]# cat /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.

#Port 22 #修改默认监听的端口;

port 7777 #把sshd的监听端口改成7777;

#AddressFamily any #监听的地址家族,指定是监听在IPV4上还是IPV6上,any表示所有;

#ListenAddress 0.0.0.0 #指定监听的地址 (0.0.0.0表示本机的所有地址);

#ListenAddress ::

# Disable legacy (protocol version 1) support in the server for new

# installations. In future the default will change to require explicit

# activation of protocol 1

Protocol 2

# HostKey for protocol version 1

#HostKey /etc/ssh/ssh_host_key #使用shhv1用到的主机密钥;

# HostKeys for protocol version 2

#HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key

#KeyRegenerationInterval 1h

#ServerKeyBits 1024 #密钥长度;

# Logging

# obsoletes QuietMode and FascistLogging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV

#LogLevel INFO

# Authentication:

#LoginGraceTime 2m #登录宽限期;

#PermitRootLogin yes #是否允许管理员直接登录;

#StrictModes yes

#MaxAuthTries 6 #最大密码输入错误次数;

#MaxSessions 10 #最大会话个数;

#RSAAuthentication yes #是否允许使用RSA机制来认证;

#PubkeyAuthentication yes

#--------中间不长改变的配置参数略----------

Subsystem sftp /usr/libexec/openssh/sftp-server #表示是否启动sftp功能;

# Example of overriding settings on a per-user basis

#Match User anoncvs

# X11Forwarding no

# AllowTcpForwarding no

# ForceCommand cvs server

sshd认证方式:

1、基于口令的认证;

2、基于密钥的认证;

# ssh-keygen -t rsa 用rsa算法生成密钥,默认密钥为id_rsa(私钥), id_rsa.pub(公钥)

# ssh-keygen -f /path/to/somefile -P oldpassword 根据现有的密钥文件生成密钥

-f /path/to/somefile: 密钥文件保存在的位置;

-P '': 指定生成旧密钥时使用的密码;

方法一:把本地主机生成的公钥 id_rsa.pub使用scp复制到远程主机的上,在远程主机使用cat id_rsa.pub>>.ssh/authorized_keys追加该公钥信息,这样就可以实现基于密钥认证的ssh登录;

方法二:# ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST

[root@www ~]# ssh-keygen -t rsa #用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:

c2:f9:c2:3d:4d:ca:52:39:7a:a7:33:de:42:11:d3:8f [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

| . |

| o . |

| o o |

| . ...E . |

| + S.. |

| . B.= |

| =.B o |

| ++= |

| .o+. |

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

[root@www ~]# ssh-keygen -f .ssh/id_rsa -P '' #根据现有密钥文件重新生成密钥;

Generating public/private rsa key pair.

.ssh/id_rsa already exists.

Overwrite (y/n)? y #提示是否确定要覆盖;

Your identification has been saved in .ssh/id_rsa.

Your public key has been saved in .ssh/id_rsa.pub.

The key fingerprint is:

bf:55:f0:0b:a5:ee:4e:4a:1d:d3:b1:0e:66:ee:55:9b [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

| |

| |

| . o |

| * o |

| S O = .|

| . * B oo|

| o * +E |

| . B . |

| o.+ |

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

#-----使用方法一:实现通过密钥文件完成身份验证(不需要输入密码)-----

[root@www ~]# scp .ssh/id_rsa.pub [email protected]:/root/ #使用spc命令复制公钥文件到远程

#主机的用户家目录下的.ss/路径下;

[email protected]'s password: #输入登录远程主机的密码;

id_rsa.pub 100% 397 0.4KB/s 00:00 #提示复制成功;

[root@mailCentOS6 ~]# ls .ssh/ #验证确认文件复制成功;

id_rsa.pub known_hosts

[root@mailCentOS6 ~]# touch .ssh/authorized_keys #路径内没有自动验证密钥文件,创建一个;

[root@mailCentOS6 ~]# cat .ssh/id_rsa.pub >>.ssh/authorized_keys #把公钥追加到自动验证密钥文件;

[root@www ~]# ssh 192.168.0.110

Last login: Mon May 11 20:45:10 2015 from 192.168.0.111

[root@mailCentOS6 ~]# #OK了,看到了没有,不用输入密码我们就直接可以远程登录了!!

#-----使用方法二:实现通过密钥文件完成身份验证(不需要输入密码)-----

[root@mailCentOS6 ~]# rm -f .ssh/authorized_keys #删除原有保存的自动验证密钥文件;

[root@www ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected] #使用命令自动传输生成自动验证密钥文件;

[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@www ~]# ssh 192.168.0.110 #验证看看是否可以登录;

Last login: Mon May 11 21:02:29 2015 from 192.168.0.111

[root@mailCentOS6 ~]# ls .ssh/ #看到了没有,我们现在已经登录到了mailCentOS6这台主机上了;

authorized_keys known_hosts

【命令补充】

scp: 利用ssh协议在主机之间实现安全文件传输的工具

scp SRC1... DEST

分两种情形:

1、源文件在本机,目标为远程主机

# scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere

源可以是目录或文件有多个,目标必须是目录

2、源文件在远程,本地为目标

# scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere

-r: 复制目录时使用(实现递归复制),scp默认不能复制目录;

-p: 保持源文件的元数据信息,包括mode和timestamp

-q: 静默模式,复制过程不显示状态信息;

-p PORT: 指定ssh协议监听的端口(远程主机)。

ssh是可以代替telnet的一种远程管理的方式.并且具有安全\快捷等优点的一种服务.

方法一:进入Xwindows, 在shell窗口执行setup命令,选择system service启动sshd服务.

方法二:在/etc/ssh/sshd_config 文件中,将permitRootLogin no|yes设置为允许root用户远程登录

/etc/init.d/sshd start 启动ssh服务

/etc/init.d/sshd stop关闭服务

启动:

service sshd start

安装过程:

1.以root身份登入系统(没登入系统和没有足够的权限都不能安装,晕,这不是废话)

2.检查安装系统时是否已经安装SSH服务端软件包:

rpm -qa|grep openssh

若显示结果中包含openssh-server-*,则说明已经安装,直接启动

sshd服务就可以了(service sshd start).(其中*的内容是该包的版本,一般为3.5p1-6)

若无任何显示,或显示中不包含openssh-server-*则说明没有安装SSH服务端软件包, 进入第3步

3.找到redhat 9.0 安装光盘,放入光驱中并加载光驱

mount -t iso9660 /dev/cdrom /mnt/cdrom (加载光驱命令)

4.查找光驱中的SSH服务端软件所在目录,一般在/mnt/cdrom/RedHat/RPMS/目录下,

可以先cd到该目录下再用ls查看,如:ls openssh*,然后根据上面具体显示直接安装

rpm -ivh openssh-3.5p1-6 (如果第二步中显示已经安装该包就不要安装)

rpm -ivh oeenssh-server-3.5p1-6

5.启动sshd服务 /etc/rc.d/init.d/sshd start

netstat -a | more看有没正常启动

如果出现:

tcp 0 0 *:ssh *:* LISTEN

就说明正常启动了

6.在windows 下用putty等SSH客户端软件连接测试,或直接在linux主机上输入

ssh 测试,但必须要先安装linux 下的SSH客户端软件包,即

openssh-clients-*,安装过程和上面的服务端包相同

7.若能成功远程登入,则说明SSH服务安装配置成功,

否则很可能就是你的防火墙阻止连接了,重新配置防火墙或干脆先停掉防火墙

(/etc/rc.d/init.d/iptables stop) 就可以连接了

或者service iptables stop


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6184582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-17
下一篇 2023-03-17

发表评论

登录后才能评论

评论列表(0条)

保存