一、ssh详解

1、什么是ssh

简略来说,ssh是一种网络协议,用于计算机之间的加密登录。

如果一个用户从本地计算机,应用ssh协定登录另一台近程计算机,咱们就能够认为,这种登录是平安的,即便被中途截获,明码也不会泄露。

须要指出的是,ssh只有一种协定,存在多种实现,既有商业实现,也有开源实现。

2、根本用法

(1)应用某个用户(例如user)登录近程主机host

命令:ssh user@host

(2)如果本地用户名和近程用户名统一,则登录时能够省略用户名

命令:ssh host

(3)ssh的默认端口是22,也就是说,你的登录申请会送进近程主机的22端口。应用-p参数,能够批改这个端口

命令:ssh –p 端口号 user@host

3、中间人攻打

SSH之所以可能保障平安,起因在于它采纳了公钥加密。整个过程如下:

(1)近程主机收到用户的登录申请,把本人的公钥发给用户。

(2)用户应用这个公钥,将登录明码加密后,发送回来。

(3)近程主机用本人的私钥,解密登录明码,如果明码正确,就批准用户登录。

这个过程自身是平安的,然而施行的时候存在一个危险:如果有人截获了登录申请,而后假冒近程主机,将伪造的公钥发给用户,那么用户很难分别真伪。因为不像https协定,SSH协定的公钥是没有证书核心(CA)公证的,也就是说,都是本人签发的。能够构想,如果攻击者插在用户与近程主机之间(比方在公共的wifi区域),用伪造的公钥,获取用户的登录明码。再用这个明码登录近程主机,那么SSH的平安机制就依然如故了。这种危险就是驰名的"中间人攻打"。

4、ssh的平安验证

SSH有本人的一套验证形式,能够拦截大部分的攻打,当然如果有人想通过撞库来尝试明码的话,就只有设置防火墙或者做其它的安全措施了。

从客户端来看,SSH提供两种级别的平安验证。

(1)第一种级别(基于口令的平安验证)

只有你晓得本人帐号和口令,就能够登录到近程主机。所有传输的数据都会被加密,然而不能保障你正在连接的服务器就是你想连贯的服务器。可能会有别的服务器在假冒真正的服务器,也就是受到“中间人”这种形式的攻打。

(2)第二种级别(基于密匙的平安验证)

须要依附密匙,也就是你必须为本人创立一对密匙,并把专用密匙放在须要拜访的服务器上。如果你要连贯到SSH服务器上,客户端软件就会向服务器发出请求,申请用你的密匙进行平安验证。服务器收到申请之后,先在该服务器上你的主目录下寻找你的专用密匙,而后把它和你发送过去的专用密匙进行比拟。如果两个密匙统一,服务器就用专用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就能够用你的私人密匙解密再把它发送给服务器。

用这种形式,你必须晓得本人密匙的口令。然而,与第一种级别相比,第二种级别不须要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。然而整个登录的过程可能须要10秒。

5、口令登录

(1)如果是第一次登录对方主机,零碎会呈现如下图的提醒

这段话的意思是,无奈确认host主机的真实性,只晓得它的公钥指纹,问你还想持续连贯吗?

所谓"公钥指纹",是指公钥长度较长(这里采纳RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是20:42:b3:d6:79:dc:79:ec:26:1a:54:8c:72:b7:a7:e3,再进行比拟,就容易多了。

很天然的一个问题就是,用户怎么晓得近程主机的公钥指纹应该是多少?答复是没有好方法,近程主机必须在本人的网站上贴出公钥指纹,以便用户自行核查。

(2)假如通过危险掂量后,用户决定承受这个近程主机的公钥

(3)、零碎会呈现一句提醒,示意192.168.10.13主机曾经失去认可

(4)、输出明码(如果明码正确,就能够登录了)

阐明:

当近程主机的公钥被承受当前,它就会被保留在文件$HOME/.ssh/known_hosts之中。下次再连贯这台主机,零碎就会认出它的公钥曾经保留在本地了,从而跳过正告局部,间接提醒输出明码。

每个SSH用户都有本人的known_hosts文件,此外零碎也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保留一些对所有用户都可信赖的近程主机的公钥。

6、公钥登录

应用明码登录,每次都必须输出明码,十分麻烦。好在SSH还提供了公钥登录,能够省去输出明码的步骤。

所谓"公钥登录",原理很简略,就是用户将本人的公钥贮存在近程主机上。登录的时候,近程主机会向用户发送一段随机字符串,用户用本人的私钥加密后,再发回来。近程主机用当时贮存的公钥进行解密,如果胜利,就证实用户是可信的,间接容许登录shell,不再要求明码。

(1)这种办法要求用户必须提供本人的公钥。如果没有现成的,能够间接用ssh-keygen生成一个,如下图所示

阐明:

运行下面的命令当前,零碎会呈现一系列提醒,能够一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果放心私钥的平安,这里能够设置一个。

运行完结当前,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。id_rsa.pub是公钥,id_rsa是私钥。

(2)这时再输出上面的命令,将公钥传送到近程主机host下面

命令:ssh-copy-id 192.168.10.12

阐明:

第一次是须要输出明码的,但之后ssh就不须要输明码了。

如果ssh-copy-id不行的话,就关上近程主机的/etc/ssh/sshd_config这个文件,查看上面几行后面"#"正文是否取掉。

  RSAAuthentication yes

  PubkeyAuthentication yes

  AuthorizedKeysFile .ssh/authorized_keys

而后,重启近程主机的ssh服务。

7、authorized_keys文件

近程主机将用户的公钥,保留在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只有把它追加在authorized_keys文件的开端就行了。

(1)这里不应用下面的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的开端。

5)、写入authorized_keys文件后,公钥登录的设置就实现了。

(2)通过装置lrzsz服务实现

1)、装置lrzsz服务后,应用sz +公钥门路下载下来

2)、通过rz命令将下载下来的公钥上传到近程主机上,将公钥重定向追加到文件authorized_keys的开端

3)、写入authorized_keys文件后,公钥登录的设置就实现了。

二、ssh自定义平安设置

1、为了ssh登陆的时候加一层爱护,能够批改默认端口。批改ssh服务配置文件/etc/ssh/sshd_config

port 2222

这样近程连贯时加上端口

ssh 192.168.10.13 -p 2222

2、ssh应用时加-l前面跟用户名,示意登陆到对方的这个用户上面。

ssh -l user 192.168.10.13 -p 2222

等同于

ssh user@192.168.10.13 -p 2222

3、限度ssh登陆的起源ip,白名单设置(hosts.allow优先级最高)

1)、通过iptables设置ssh端口的白名单,如下设置只容许192.168.1.0/24网段的客户机能够近程连贯本机

Iptables -A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT

或者

vim /etc/sysconfig/iptables

-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT

2)、通过/etc/hosts.allow外面进行限度(如下),/etc/hosts.deny文件不要任何内容编辑,放弃默认!

vim /etc/hosts.allow

sshd:192.168.1.,192.168.9.,124.65.197.154,61.148.60.42,103.10.86.7:allow

sshd:all:deny

4、仅容许特定的用户通过SSH登陆

如不容许root用户登录;

只容许几个指定的用户登录(比方wangshibo、guohuihui、liuxing用户)

禁止某些指定的用户登录(比方zhangda,liqin用户)

然而要留神:设置的这几个用户必须同时存在于本机和对方机器上

批改ssh服务配置文件/etc/ssh/sshd_config

PermitRootLogin no //将yes批改为no

AllowUsers wangshibo guohuihui liuxing //这个参数AllowUsers如果不存在,须要手动创立,用户之间空格隔开;

DenyUsers zhagnda liqin //这个参数DenyUsers如果不存在,须要手动创立,用户之间空格隔开;

也能够设置仅容许某个组的成员通过ssh拜访主机。

AllowGroups wheel ops

5、勾销明码验证,只用密钥对验证

批改ssh服务配置文件/etc/ssh/sshd_config

PasswordAuthentication no

PubkeyAuthentication yes

6、给账号设置简单的明码:将明码保留到文本进行复制和粘帖就能够了

rpm -ivh expect-5.43.0-5.1.i386.rpm| yum -y install expect

mkpasswd -l 128 -d 8 -C 15 -s 10 //将上面明码保留到文本进行复制、粘贴即可

lVj.jg&sKrf0cvtgmydqo7qPotxzxen9mefy?ej!kcaX2gQrcu2ndftkeamllznx>iHikTagiVz0$cMtqOcIypkpd,vvD*kJhs3q@sb:CiCqgtqdqvse5lssfmranbtx

参数阐明:

-l 明码长度

-d 多少个数字

-C 大写字母个数

-s 特殊符号的个数

7、只容许通过指定的网络接口来拜访SSH服务,(如果本服务器有多个IP的时候)

依然是批改/etc/ssh/sshd_config,如下:

ListenAddress 192.168.1.15  //默认监听的是0.0.0.0

这样,就只容许近程机器通过ssh连贯本机的192.168.1.15内网ip来进行登陆了。

8、禁止空明码登录

如果本机系统有些账号没有设置明码,而ssh配置文件里又没做限度,那么近程通过这个空明码账号就能够登陆了,这是及其不平安的,所以肯定要禁止空明码登陆。批改/etc/ssh/sshd_config,如下:

PermitEmptyPasswords no //这一项,默认就是禁用空明码登陆

9、 ssh_config和sshd_config

ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都容许你通过设置不同的选项来扭转客户端程序的运行形式。

三、ssh配置文件详解

1、/etc/ssh/ssh_config配置文件

选项参数 阐明Host * 选项“Host”只对可能匹配前面字串的计算机无效。“*”示意所有的计算机。ForwardAgent no 设置连贯是否通过验证代理(如果存在)转发给近程计算机。ForwardX11 no 设置X11连贯是否被主动重定向到平安的通道和显示集(DISPLAY setRhostsAuthentication no 设置是否应用基于rhosts的平安验证RhostsRSAAuthentication no 设置是否应用用RSA算法的基于rhosts的平安验证RSAAuthentication yes 设置是否应用RSA算法进行平安验证PasswordAuthentication yes 设置是否应用口令验证FallBackToRsh no 设置如果用ssh连贯呈现谬误是否主动应用rshUseRsh no 设置是否在这台计算机上应用“rlogin/rsh”BatchMode no 如果设为“yes”,passphrase/password(交互式输出口令)的提醒将被禁止。当不能交互式输出口令的时候,这个选项对脚本文件和批处理工作非常有用CheckHostIP yes 设置ssh是否查看连贯到服务器的主机的IP地址以避免DNS坑骗。倡议设置为“yes”StrictHostKeyChecking no 如果设置成“yes”,ssh就不会主动把计算机的密匙退出“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙产生了变动,就回绝连贯IdentityFile ~/.ssh/identity 设置从哪个文件读取用户的RSA平安验证标识Port 22 设置连贯到近程主机的端口Cipher blowfish 设置加密用的明码EscapeChar ~ 设置escape字符
1.

  

2、/etc/ssh/sshd_config配置文件

参数选项 阐明
Port 22 SSH 预设应用 22 这个 port,您也能够应用多的 port !Protocol 2,1 抉择的 SSH 协定版本,能够是 1 也能够是 2 ,如果要同时反对两者,就必须要应用 2,1 这个分隔了!ListenAddress 0.0.0.0 监听的主机适配卡!举个例子来说,如果您有两个 IP,别离是 192.168.0.100 及 192.168.2.20 ,那么只想要凋谢 192.168.0.100 时,就能够写如同上面的款式:ListenAddress 192.168.0.100 只监听来自 192.168.0.100 这个 IP 的SSH联机。如果不应用设定的话,则预设所有接口均承受 SSHPidFile /var/run/sshd.pid 能够搁置 SSHD 这个 PID 的档案!左列为默认值LoginGraceTime 600 当使用者连上 SSH server 之后,会呈现输出明码的画面,在该画面中,在多久工夫内没有胜利连上 SSH server ,就断线!工夫为秒!Compression yes 是否能够应用压缩指令?HostKey /etc/ssh/ssh_host_key SSH version 1 应用的私钥HostKey /etc/ssh/ssh_host_rsa_key SSH version 2 应用的 RSA 私钥HostKey /etc/ssh/ssh_host_dsa_key SSH version 2 应用的 DSA 私钥KeyRegenerationInterval 3600 由后面联机的阐明能够晓得, version 1 会应用 server 的 Public Key ,每隔一段时间来从新建设一次!工夫为秒!ServerKeyBits 768 Server key 的长度!SyslogFacility AUTH 当有人应用 SSH 登入零碎的时候,SSH会记录信息LogLevel INFO 登录记录的等级---》全副PermitRootLogin no 是否容许 root 登入!预设是容许的,然而倡议设定成 no!UserLogin no 在 SSH 底下原本就不承受 login 这个程序的登入!StrictModes yes 当使用者的 host key 扭转之后,Server 就不承受联机RSAAuthentication yes 是否应用纯的 RSA 认证!?仅针对 version 1 !PubkeyAuthentication yes 是否容许 Public Key ?只有 version 2AuthorizedKeysFile .ssh/authorized_keys 设定若要应用不须要明码登入的账号时,那么那个账号的寄存档案所在档名!RhostsAuthentication no 本机系统不应用 .rhosts , .rhosts 不平安!IgnoreRhosts yes 是否勾销应用 ~/.ssh/.rhosts 来做为认证!RhostsRSAAuthentication no 针对 version 1 ,应用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算形式来进行认证!HostbasedAuthentication no 这个我的项目与下面的我的项目相似,不过是给 version 2 应用的!IgnoreUserKnownHosts no 是否疏忽家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容PasswordAuthentication yes 明码验证当然是须要的!PermitEmptyPasswords no 下面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这个我的项目在是否容许以空的明码登入!ChallengeResponseAuthentication yes 挑战任何的明码认证!所以,任何 login.conf 规定的认证形式,均可实用!PAMAuthenticationViaKbdInt yes 是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定生效! 与Kerberos 无关的参数设定!底下不必设定KerberosAuthentication noKerberosOrLocalPasswd yesKerberosTicketCleanup yesKerberosTgtPassing no 无关在 X-Window 底下应用的相干设定X11Forwarding yesX11DisplayOffset 10X11UseLocalhost yes` `PrintMotd no 登入后是否显示出一些信息呢?例如上次登入的工夫、地点等,预设是 yes ,然而,如果为了平安,能够思考改为 no !PrintLastLog yes 显示上次登入的信息!预设也是 yesKeepAlive yes 一般而言,如果设定这我的项目的话,那么 SSH Server 会传送KeepAlive 的讯息给 Client 端,以确保两者的联机失常!在这个状况下,任何一端死掉后, SSH 能够立即晓得!而不会有僵尸程序的产生!UsePrivilegeSeparation yes 使用者的权限设定我的项目!MaxStartups 10 同时容许几个尚未登入的联机画面DenyUsers 设定受抵御的使用者名称``AllowUsers 设定容许的使用者名称

1.
2.

  

四、ssh练习

1、配置ssh只能应用key登录

(1)、近程主机的配置过程(主机192.168.10.13)

①批改主机192.168.10.13的配置文件,使其反对应用ssh私钥登录

Vim /etc/ssh/sshd_config

勾销上面三行的正文,如图1所示

RSAAuthentication yes ##设置是否应用RSA算法进行平安验证

PubkeyAuthentication yes ##是否容许 Public Key ?只有 version 2

AuthorizedKeysFile .ssh/authorized_keys ##设定若要应用不须要明码登入的账号时,那么那个账号的寄存档案所在档名!

图1、勾销相干正文

重启sshd服务即可

②敞开root用户应用明码登录

批改主机192.168.10.13的配置文件/etc/ssh/sshd_config,将PasswordAuthentication 前面的yes改为no,如图2所示

PasswordAuthentication no ##设置是否应用口令验证

图2、把yes改为no

重启sshd服务即可

(2)本机的配置过程(主机192.168.10.11)

①应用ssh-keygen生成公钥和私钥,如图3所示

图3、ssh-keygen生成公钥和私钥

②间接应用ssh口令登录来验证刚刚的配置是否胜利

在主机192.168.10.11上,ssh 192.168.10.13咱们能够发现ssh不进去了,如图4所示

图4、验证应用口令是否ssh胜利

③将主机192.168.10.11的公钥上传到主机192.168.10.13上

a.装置lrzsz服务

Yum install –y lrzsz

b.应用sz命令下载公钥,如图5所示

图5、下载公钥

c.将公钥上传要主机192.168.10.13上,如图6所示

图6、上传公钥

d.将公钥追加到文件authorized_keys里

[root@localhost ~]# cat id_rsa.pub >> /root/.ssh/authorized_keys

e.在主机192.168.10.11上验证是否可能胜利ssh到主机192.168.10.13上,如图7所示

图7、胜利ssh到主机192.168.10.13

2、指定能够登录的主机和不能够登录的主机

(1)办法一、批改文件/etc/hosts.allow和/etc/hosts.deny

①批改主机192.168.10.13的文件/etc/hosts.allow和/etc/hosts.deny

在文件/etc/hosts.allow增加一条容许主机192.168.10.11 ssh的记录,如图8所示

图8、容许主机192.168.10.11 ssh

在文件/etc/hosts.deny增加一条回绝主机192.168.10.12 ssh的记录,如图9所示

图9、回绝主机192.168.10.12 ssh

②验证

在主机192.168.10.11上验证胜利ssh到主机192.168.10.13上,如图10所示

图10、主机192.168.10.11胜利ssh到主机192.168.10.13

在主机192.168.10.12上验证不能ssh到主机192.168.10.13上,如图11所示

图11、主机192.168.10.12不能ssh到主机192.168.10.13

(2)办法二、批改文件/etc/ssh/sshd_config

①批改文件/etc/ssh/sshd_config,在最初面增加如图12所示的两行,而后重启sshd服务

图12、增加的内容

阐明:

AllowUsers root@192.168.10.11 ##容许主机192.168.10.11 ssh登录

DenyUsers root@192.168.10.12 ##禁止主机192.168.10.12 ssh登录

②验证

在主机192.168.10.11上验证胜利ssh到主机192.168.10.13上,如图13所示

图13、主机192.168.10.11胜利ssh到主机192.168.10.13

在主机192.168.10.12上验证不能ssh到主机192.168.10.13上,如图14所示

图14、主机192.168.10.12不能ssh到主机192.168.10.13

③查看Linux日志中无关ssh登录胜利和登录失败的日志

ssh的日志寄存在文件/var/log/ secure里

例如:

查看ssh登录失败的日志,如图15所示

图15、ssh登录失败日志

查看通过RSA胜利ssh的日志,如图16所示

图16、通过RSA胜利ssh的日志

五、在SecureCRT上配置公钥的办法

在SecureCRT上配置公钥的办法:

1、首先生成公钥。

关上SecureCRT程序,点击菜单栏的“工具”-》“创立公钥”。依照步骤执行。其中一步比拟重要就是抉择公钥的格局。倡议抉择“OpenSSH”,否则在服务器端应用时须要转换为OpenSSH格局。如果选错了。从新生成一次就能够了。而后抉择公钥私钥寄存的中央。默认Identity是私钥,Identity.pub是公钥。

2、把Identity.pub文件上传到你要登陆的Linux服务器上。办法有很多,比方ssh(先不要配置为公钥登陆),ftp等。上传时抉择ASCII形式。

3、在SecureCRT创立服务器连贯。协定应用ssh。在“鉴权”办法中,勾销勾选“明码”。抉择“公钥”,而后点击左边的属性按钮,在对话框中。

应用全局公钥设置:示意所有连贯都应用该公钥连贯服务器。

应用会话公钥设置:能够别离为每个连贯指定不同的公钥。

上面的门路就是指明私钥的具体门路。留神了,这里要指明私钥的门路。

保留连贯就能够了。
参考链接:

10 Must-know Tips about SSH sshd_config file