乐趣区

关于linux:Linux-ssh配置详解

一、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

退出移动版