创建ssh公私钥
首先你需要放弃使用的密码登录的方式,因为那种方式实在太让人崩溃了. 下面我们开始使用一种被称为“公私钥“认证的方式来进行ssh登录. “公私钥“认证方式简单的解释是
你需要创建一对公私钥
然后把公钥放到服务器上, 自己保留好私钥
当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了
我们现在来点实际的, 我们有两台机器: qian.jianingy.com(这是我们的服务器, 实际上它是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥对
生成公私钥
jianingy@nby:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jianingy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
15:c6:44:59:bf:6f:7a:11:eb:cb:02:d4:aa:33:e0:ae jianingy@nby
ssh-keygen程序会寻问你把公私钥文件存放在哪里.根据传统我们会把它放在~/.ssh里面.如果你不想
追随这个传统, 你可能给花些时间游说那些ssh程序.至于公私钥的名字, 用默认的id_rsa吧,道理是一样的.
接下来输入一个口令,用来保护这个私钥. 我强烈建议你输入这个口令而不是让它为空(稍后我会解释的). 现在公私钥生成好了,
私钥(identification)被保存成了id_rsa, 公钥(public key)被保存成id_rsa.pub. 注意:
一定要保护好你的私钥,他就像你家里存家底的保险柜的钥匙一样重要.
现在把doggy.pub拷贝到服务器上去, 并且将其内容追加到一个叫~/.ssh/authorized_keys的文件里去
jianingy@nby:~$ cat /home/jianingy/.ssh/doggy.pub | ssh 192.168.1.9 "cat - >> ~/.ssh/authorized_keys"
好现在试试看ssh登录吧. 如果你想了解更多可以试试看用ssh -v登录.
使用密钥登录
jianingy@nby:~$ ssh qian.jianingy.com
Enter passphrase for key '/home/jianingy/.ssh/id_rsa':
现在输入你的passphrase, 然后就能成功登录了.的确, 到现在我们还不能无密码登录,
请再耐心点. 有个特例是, 如果你使用了空的passphrase,
那么现在已经可以无密码登录了.但是我也必须提醒你这是很不安全的做法,一旦有人复制了你的passphrase, 它就真的成了机房“任我行“了.
使用ssh-agent提供私钥
接
下来是最关键的部分. 前面我们把输入密码变成了输入passphrase,
这没有带来任何方便.但是,要知道有个家伙能帮助我们自动输入这个passphrase(只是看起来像是自动输入而已).
我们只要输入一次passphrase, 以后的工作就可以交给那家伙了. 它就是ssh-agent(据我所知他和agent
smith没有太多关系). 运行ssh-agent吧
jianingy@nby:~$ eval `ssh-agent`
jianingy@nby:~$ ssh-add
运行ssh-add添加密钥
jianingy@nby:~$ ssh-add
Enter passphrase for /home/jianingy/.ssh/id_rsa:
Identity added: /home/jianingy/.ssh/id_rsa (/home/jianingy/.ssh/id_rsa)
好了,现在再次登录服务器, 我们已经没有密码的烦恼了.至于为什么要用这么奇怪的方式运行ssh-agent, 你可以试着在命令行上输入一个ssh-agent回车, 看看输出什么你就会明白了.
复用已经存在的ssh-agent
如
果你看了上面直接运行ssh-agent的输出,你应该已经明白了ssh和ssh-agent是如何相互了解的. 没错,
通过环境变量ssh知道了与ssh-agent通信的unix
socket在哪里.然而当我们打开一个新的终端时我们必须要重新设置这个环境变量.做为一个慵懒的系统管理员,这是不可忍受的.所以我用perl写了这
个脚本, 他可以找到以前的ssh-agent.
view sourceprint?
01.#!/usr/bin/env perl
02.# author: jianingy
03.# 2007/06/24
04.
05.use strict;
06.my $exist;
07.my @dirs = grep {-r $_} glob "/tmp/ssh-*";
08.foreach (@dirs) {
09. my @socks = glob("{$_}/agent.*");
10. next unless (@socks);
11. foreach (@socks) {
12. $exist = $_;
13. # check agent
14. unless (system "SSH_AUTH_SOCK=$_ ssh-add -l >/dev/null 2>&1") {
15. print "export SSH_AUTH_SOCK=$_\n";
16. exit 0;
17. }
18. }
19.}
20.
21.if ($exist) {
22. system "SSH_AUTH_SOCK=$exist ssh-add";
23. print "export SSH_AUTH_SOCK=$exist\n";
24.} else {
25. system "ssh-agent";
26. exec $0;
27.}
现在只需要在.bashrc里加入
eval `ssh-attach`
便可以在每次启动终端的时候就能复用ssh-agent了.到了这里我们已经实现了免密码的ssh登录(当然至少要输入一次passphrase, 但是相对于无数次的密码输入相信你不会在乎这一次的:P).
㈡ 路由器解锁ssh是什么意思
通俗点说就是可以安全用网。
1.开启一条网络路径,以供在别的地方的网络环境下,可以轻松访问到小米路由连接的电脑上的资源。但是也有对应的危险性,一般密匙泄露,即任何知道密码的人都能访问了。
2.用于远程会话,给公司内部传输文件提供了方便性,还有效率。
3.亦可做小型网站的登录服务器等。服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。
SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台-包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
㈢ 如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击
为了在CentOS 或 RHEL上安装fail2ban,首先设置EPEL仓库,然后运行以下命令。
$ sudo yum install fail2ban
在Fedora上安装fail2ban,简单地运行以下命令:
$ sudo yum install fail2ban
在Ubuntu,Debian 或 Linux Mint上安装fail2ban:
$ sudo apt-get install fail2ban
为SSH服务器配置Fail2ban
现在你已经准备好了通过配置 fail2ban 来加强你的SSH服务器。你需要编辑其配置文件
/etc/fail2ban/jail.conf。
在配置文件的“[DEFAULT]”区,你可以在此定义所有受监控的服务的默认参数,另外在特定服务的配置部分,你可以为每个服务(例如SSH,Apache等)设置特定的配置来覆盖默认的参数配置。
在针对服务的监狱区(在[DEFAULT]区后面的地方),你需要定义一个[ssh-iptables]区,这里用来定义SSH相关的监狱配置。真正的禁止IP地址的操作是通过iptables完成的。
下面是一个包含“ssh-iptables”监狱配置的/etc/fail2ban/jail.conf的文件样例。当然根据你的需要,你也可以指定其他的应用监狱。
$ sudo vi /etc/fail2ban/jail.local
[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名
# 用于指定哪些地址可以忽略 fail2ban 防御
ignoreip =127.0.0.1172.31.0.0/2410.10.0.0/24192.168.0.0/24
# 客户端主机被禁止的时长(秒)
bantime =86400
# 客户端主机被禁止前允许失败的次数
maxretry =5
# 查找失败次数的时长(秒)
findtime =600
mta = sendmail
[ssh-iptables]
enabled =true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, [email protected], [email protected]]
# Debian 系的发行版
logpath =/var/log/auth.log
# Red Hat 系的发行版
logpath =/var/log/secure
# ssh 服务的最大尝试次数
maxretry =3
根据上述配置,fail2ban会自动禁止在最近10分钟内有超过3次访问尝试失败的任意IP地址。一旦被禁,这个IP地址将会在24小时内一直被禁止访问 SSH 服务。这个事件也会通过sendemail发送邮件通知。
一旦配置文件准备就绪,按照以下方式重启fail2ban服务。
在 Debian, Ubuntu 或 CentOS/RHEL 6:
$ sudo service fail2ban restart
在 Fedora 或 CentOS/RHEL 7:
$ sudo systemctl restart fail2ban
为了验证fail2ban成功运行,使用参数'ping'来运行fail2ban-client 命令。 如果fail2ban服务正常运行,你可以看到“pong(嘭)”作为响应。
$ sudo fail2ban-client ping
Server replied: pong
测试 fail2ban 保护SSH免遭暴力破解攻击
为了测试fail2ban是否能正常工作,尝试通过使用错误的密码来用SSH连接到服务器模拟一个暴力破解攻击。与此同时,监控 /var/log/fail2ban.log,该文件记录在fail2ban中发生的任何敏感事件。
$ sudo tail -f /var/log/fail2ban.log
根据上述的日志文件,Fail2ban通过检测IP地址的多次失败登录尝试,禁止了一个IP地址192.168.1.8。
检查fail2ban状态并解禁被锁住的IP地址
由于fail2ban的“ssh-iptables”监狱使用iptables来阻塞问题IP地址,你可以通过以下方式来检测当前iptables来验证禁止规则。
$ sudo iptables --list -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp --0.0.0.0/00.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-SSH (1 references)
target prot opt source destination
DROP all --192.168.1.80.0.0.0/0
RETURN all --0.0.0.0/00.0.0.0/0
如果你想要从fail2ban中解锁某个IP地址,你可以使用iptables命令:
$ sudo iptables -D fail2ban-SSH -s 192.168.1.8-j DROP
当然你可以使用上述的iptables命令手动地检验和管理fail2ban的IP阻塞列表,但实际上有一个适当的方法就是使用fail2ban-client命令行工具。这个命令不仅允许你对"ssh-iptables"监狱进行管理,同时也是一个标准的命令行接口,可以管理其他类型的fail2ban监狱。
为了检验fail2ban状态(会显示出当前活动的监狱列表):
$ sudo fail2ban-client status
为了检验一个特定监狱的状态(例如ssh-iptables):
$ sudo fail2ban-client status ssh-iptables
上面的命令会显示出被禁止IP地址列表。
为了解锁特定的IP地址:
$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8
注意,如果你停止了Fail2ban 服务,那么所有的IP地址都会被解锁。当你重启
Fail2ban,它会从/etc/log/secure(或
/var/log/auth.log)中找到异常的IP地址列表,如果这些异常地址的发生时间仍然在禁止时间内,那么Fail2ban会重新将这些IP地址禁止。
设置 Fail2ban 自动启动
一旦你成功地测试了fail2ban之后,最后一个步骤就是在你的服务器上让其在开机时自动启动。在基于Debian的发行版中,fail2ban已经默认让自动启动生效。在基于Red-Hat的发行版中,按照下面的方式让自动启动生效。
在 CentOS/RHEL 6中:
$ sudo chkconfig fail2ban on
在 Fedora 或 CentOS/RHEL 7:
$ sudo systemctl enable fail2ban
㈣ openssh网络安全分析
SSH协议出现之前,在网络设备管理上广泛应用的一种方式是Telnet。Telnet协议的优势在于通过它可以远程地登录到网络设备上,对网络设备进行配置,为网络管理员异地管理网络设备提供了极大的方便。但是,Telnet协议存在三个致命的弱点:
A、明文传输:数据传输采用明文方式,传输的数据没有任何机密性可言。
B、认证机制脆弱。用户的认证信息在网络上以明文方式传输,很容易被窃听; Telnet 只支持传统的密码认证方式,很容易被攻击。
C、“伪服务器欺骗”:客户端无法真正识别服务器的身份,攻击者很容易进行“伪服务器欺骗”。SSH协议正是为了克服Telnet协议存在的问题而诞生的。
D、数据传输过程被篡改,无法保证传输过程数据完整性
ssh如果解决上述几个安全问题?我们一个个来分析
通过 在 通信双方建立“加密通道”,保证传输的数据不被窃听。并且需要有合适的手段保证通信双方秘钥的安全
所谓加密通道,是指发送方在发送数据前,使用加密密钥对数据进行加密,然后将
数据发送给对方;接收方接收到数据后,利用解密密钥从密文中获取明文。
加解密算法分为两类: 对称密钥算法:数据加密和解密时使用相同的密钥和相同的算法。 非对称密钥算法:数据加密和解密时使用不同的密钥,一个是公开的公钥,
一个是由用户秘密保存的私钥。
由于非对称密钥算法比较耗时,一般多用于数字签名以及身份认证。SSH加密通道
上的数据加解密使用对称密钥算法,目前主要支持的算法有DES、3DES、AES
等,这些算法都可以有效地防止交互数据被窃听,而且由于采用了初始化向量保
护,可以防止类似于密码流复用等密码分析工具的攻击。
对称密钥算法要求解密密钥和加密密钥完全一致,才能顺利从密文中解密得到明
文。因此,要建立加密通道,必须先在通信双方部署一致的加解密密钥。部署加解
密密钥的方式有多种:手工配置和第三方机构分配等。手工配置的方式扩展性差,
只适合一些小型的本地网络;使用第三方机构分配密钥的方式,需要额外的第三方
服务器,而且密钥在网络中传输容易被窃听。
SSH协议使用一种安全的方式在通信双方部署密钥:密钥交换算法。利用密钥交换
算法可以在通信双方动态地产生密钥,这个密钥只能被通信的双方获得,任何第三
者都无法窃听,这就在源头上保证了加解密使用密钥的安全性,很好地解决了密钥
分发问题。
支持的数据加密算法有:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]
默认使用的算法:
[email protected],
aes128-ctr,aes192-ctr,aes256-ctr,
[email protected],[email protected]
可以通过关键字 “ Ciphers”指定使用的算法,多个算法间,需要使用逗号相隔
有三种方式指定算法
方式一:Ciphers 关键字后接算法名称,比如:Ciphers aes256-ctr,aes192-ctr表示只使用
aes256-ctr,aes192-ctr两种算法
方式二:Ciphers 关键字后接算法名称,并且算法名称前带上“+”,表示在默认算法基础上,新增“+”后的算法
方式三:Ciphers 关键字后接算法名称,并且算法名称前带上“-”,表示在默认算法基础上,裁剪“-”后的算法
支持的密钥交换算法有:
curve25519-sha256
[email protected]
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
默认使用的密钥交换算法有:
curve25519-sha256,[email protected],
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
diffie-hellman-group14-sha1
可以通过关键字 “
KexAlgorithms ”指定使用的算法,多个算法间,需要使用 逗号相隔
有三种方式指定算法
方式一:KexAlgorithms关键字后接算法名称,比如:KexAlgorithms
diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
表示只使用diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
两种算法
方式二:KexAlgorithms关键字后接算法名称,并且算法名称前带上“+”,表示在默认算法基础上,新增“+”后的算法
方式三:KexAlgorithms关键字后接算法名称,并且算法名称前带上“-”,表示在默认算法基础上,裁剪“-”后的算法
传统的方式,采用的是密码认证模式:用户在ssh客户端输入账号、密码,openssh完成对登录用户进行密码认证。用户的身份信息等关键数据都保存在认证服务器上
由于密码认证方式的认证强度较弱,SSH协议引入了公钥认证方式。目前,openssh
可以利用RSA和DSA两种非对称密钥算法实现公钥认证。
公钥认证的过程分为两个部分::
(1) 公钥验证:客户端首先将自己本地密钥对的公钥部分,按照字符串格式发送
到服务器。服务器使用本地保存的客户端公钥,与报文中携带的客户端公钥
进行比较,验证客户端持有公钥的正确性。
(2) 数字签名验证:如果公钥验证成功,客户端继续使用自己本地密钥对的私钥
部分,对特定报文进行摘要运算,将所得的结果(即数字签名)发送给服务
器,向服务器证明自己的身份;服务器使用预先配置的该用户的公钥,对客
户端发送过来的数字签名进行验证。
公钥验证和数字签名验证中任何一个验证失败,都会导致本次公钥认证失败。
AuthenticationMethods
PubkeyAuthentication:是否使用公钥认证,默认为yes
UsePAM:该关键字只有在移植版中支持,PAM为“可插拔认证模块”,用于
PubkeyAcceptedKeyTypes:公钥认证算法
[email protected], [email protected], [email protected], [email protected], [email protected], ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed25519,ssh-rsa
公钥认证配置方法:
1. 首先,在客户端生成一个对钥:
# ssh-keygen -t 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:
fa:49:6c:0a:90:0e:0f:57:2e:21:79:f6:65:7f:8d:42
这里我们用的是rsa算法,我们也可以使用dsa算法:
ssh-keygen -t dsa
从上面可以看到,提示输入私钥的保护密码,我们也可以不选,直接ENTER就行了!
现在密钥已经生成:
id_rsa(私钥) id_rsa.pub(公钥)
如果是dsa算法生成的话:
id_dsa id_dsa.pub
2. 我们将公钥传到服务器的.ssh目录下.
scp id_rsa.pub user@hostname:/home/user/.ssh/authorized_keys
3. 将/etc/ssh/sshd_config
中的rsa认证功能打开.(去掉注释)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后重新启动sshd就行了.
如果是dsa算法的话同理.
疑问:公钥认证,是否使用了PAM?还是openssh自己搞的?
可插拔认证模块的介绍:
http://www.infoq.com/cn/articles/wjl-linux-pluggable-authentication-mole
http://www.infoq.com/cn/articles/linux-pam-one
ChrootDirectory:
Specifies
2.3.1 原理
用户认证机制只实现了服务器端对客户端的认证,而客户端无法认证服务器端,因
此存在着“伪服务器欺骗”的安全隐患。
图4 伪服务器欺骗
如图4所示,当客户端主机需要与服务器建立连接时,第三方攻击者冒充真正的服
务器,与客户端进行数据交互,窃取客户端主机的安全信息,并利用这些信息去登
录真正的服务器,获取服务器资源,或对服务器进行攻击。
为了防止类似这样的伪服务器欺骗,SSH协议支持客户端对服务器端进行认证。服
务器端在密钥交换阶段,使用自己的私钥对一段固定格式的数据进行数字签名,并
将该签名发往客户端,客户端使用本地保存的服务器公钥,对签名进行鉴别,从而
达到认证服务器的目的。
HostKey
HostKeyAlgorithms
[email protected], [email protected], [email protected], [email protected], [email protected], ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed25519,ssh-rsa
Macs
支持的消息认证码(Mac)算法有:
hmac-md5
hmac-md5-96
hmac-sha1hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
默认使用的密钥交换算法有:
[email protected],[email protected],
[email protected],[email protected],
[email protected],
[email protected],[email protected],
hmac-sha2-256,hmac-sha2-512,hmac-sha1
可以通过关键字 “Macs ”指定使用的算法,多个算法间,需要使用 逗号相隔
有三种方式指定算法
方式一:Macs关键字后接算法名称,比如:KexAlgorithms
hmac-sha2-256,hmac-sha2-512
表示只使用hmac-sha2-256,hmac-sha2-512
两种算法
方式二:Macs关键字后接算法名称,并且算法名称前带上“+”,表示在默认算法基础上,新增“+”后的算法
方式三:Macs关键字后接算法名称,并且算法名称前带上“-”,表示在默认算法基础上,裁剪“-”后的算法
openssh通过 以下4类算法,保证传输过程网络安全:
A、传输数据加密:传输加密算法,密钥协商算法,
B、公钥认证算法
C、Mac算法
㈤ ssh暴力破解的后果
对服务器性能是会有一些影响,但最大的影响是你的服务器root密码被破解,被完全控制。ssh攻击的目的就是暴力破解你的密码。最直接的影响就是设备瘫痪(服务器死机)SSH暴力破解是指攻击者通过密码字典或随机组合密码的方式尝试登陆服务器(针对的是全网机器),这种攻击行为一般不会有明确攻击目标,多数是通过扫描软件直接扫描整个广播域或网段。 怎样防御暴力破解攻击?一:系统及网络安全1、定期检查并修复系统漏洞2、定期修改SSH密码,或配置证书登陆3、修改SSH端口4、禁Ping5、若你长期不需要登陆SSH,请在面板中将SSH服务关闭6、安装悬镜、云锁、安全狗等安全软件(只安装一个)
㈥ 如何使用 DenyHosts 来阻止 SSH暴力攻击
Denyhosts是一个Linux系统下阻止暴力破解SSH密码的软件,它的原理与DDoS Deflate类似,可以自动拒绝过多次数尝试SSH登录的IP地址,防止互联网上某些机器常年破解密码的行为,也可以防止黑客对SSH密码进行穷举。
众所周知,暴露在互联网上的计算机是非常危险的。并不要因为网站小,关注的人少或不惹眼就掉以轻心:互联网中的大多数攻击都是没有目的性的,黑客们通过大范围IP端口扫描探测到可能存在漏洞的主机,然后通过自动扫描工具进行穷举破解。笔者的某台服务器在修改SSH 22号端口之前,平均每天接受近百个来自不同IP的连接尝试。而DenyHosts正是这样一款工具。下文将对该工具的安装与使用方法进行介绍。
DenyHosts阻止攻击原理
DenyHosts会自动分析 /var/log/secure 等安全日志文件,当发现异常的连接请求后,会自动将其IP加入到 /etc/hosts.deny 文件中,从而达到阻止此IP继续暴力破解的可能。同时,Denyhosts还能自动在一定时间后对已经屏蔽的IP地址进行解封,非常智能。
官方网站
Denyhosts的官方网站为:http://denyhosts.sourceforge.net/ (杜绝Putty后门事件,谨记安全软件官网)
安装方法
1、下载DenyHosts源码并解压(目前最新版为2.6)
1 [root@www ~]# wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz
2 [root@www ~]# tar zxvf DenyHosts-2.6.tar.gz
3 [root@www ~]# cd DenyHosts-2.6
2、安装部署
1 [root@www DenyHosts-2.6]# yum install python -y
2 [root@www DenyHosts-2.6]# python setup.py install
3、准备好默认的配置文件
1 [root@www DenyHosts-2.6]# cd /usr/share/denyhosts/
2 [root@www denyhosts]# cp denyhosts.cfg-dist denyhosts.cfg
3 [root@www denyhosts]# cp daemon-control-dist daemon-control
4、编辑配置文件denyhosts.cfg
1 [root@www denyhosts]# vi denyhosts.cfg
该配置文件结构比较简单,简要说明主要参数如下:
PURGE_DENY:当一个IP被阻止以后,过多长时间被自动解禁。可选如3m(三分钟)、5h(5小时)、2d(两天)、8w(8周)、1y(一年);
PURGE_THRESHOLD:定义了某一IP最多被解封多少次。即某一IP由于暴力破解SSH密码被阻止/解封达到了PURGE_THRESHOLD次,则会被永久禁止;
BLOCK_SERVICE:需要阻止的服务名;
DENY_THRESHOLD_INVALID:某一无效用户名(不存在的用户)尝试多少次登录后被阻止;
DENY_THRESHOLD_VALID:某一有效用户名尝试多少次登陆后被阻止(比如账号正确但密码错误),root除外;
DENY_THRESHOLD_ROOT:root用户尝试登录多少次后被阻止;
HOSTNAME_LOOKUP:是否尝试解析源IP的域名;
大家可以根据上面的解释,浏览一遍此配置文件,然后根据自己的需要稍微修改即可。
5、启动Denyhosts
1 [root@www denyhosts]# ./daemon-control start
如果需要让DenyHosts每次重启后自动启动,还需要:
6、设置自动启动
设置自动启动可以通过两种方法进行。
第一种是将DenyHosts作为类似apache、mysql一样的服务,这种方法可以通过 /etc/init.d/denyhosts 命令来控制其状态。方法如下:
1 [root@www denyhosts]# cd /etc/init.d
2 [root@www init.d]# ln -s /usr/share/denyhosts/daemon-control denyhosts
3 [root@www init.d]# chkconfig --add denyhosts
4 [root@www init.d]# chkconfig -level 2345 denyhosts on
第二种是将Denyhosts直接加入rc.local中自动启动(类似于Windows中的“启动文件夹”):
1 [root@www denyhosts]# echo '/usr/share/denyhosts/daemon-control start' >> /etc/rc.local
如果想查看已经被阻止的IP,打开/etc/hosts.deny 文件即可。
㈦ 【Linux】SSH 使用密码/公钥远程登录总结
本文是笔者查阅网上资料做的总结,关于SSH原理,什么是对称加密和非对称加密,本文不过多介绍。这里介绍一下SHH的工作过程、配制方法,可能出现的问题及解决方法。
说明:本文中涉及的例子,SSH客户端为:本地主机A,SSH服务器为:服务器B
SSH协议采用C-S(客户端-服务器端)架构进行双方的身份验证以及数据的加密。
服务器端组件监听指定的端口,负责安全连接的建立、对连接方的身份认证、以及为通过身份认证的用户建立正确的环境。
客户端负责发起最初的TCP握手、安全连接的建立、验证服务器的身份与之前记录中的一致、并将自己的验证信息提供给服务器。
一个SSH会话的建立过程分为两个阶段。第一阶段,双方沟通并同意建立一个加密连接通道以供后续信息传输用。第二阶段,对请求接入的用户进行身份验证以确定服务器端是否要给该用户开放访问权限。
当客户端发起TCP连接时,服务器端返回信息说明自己支持的协议版本,如果客户端上支持的协议与之匹配,则连接继续。服务器会提供自己的公共主机密钥(public host key)以让客户端确认自己访问的是正确的机器。
然后,双方采用一种Diffie-Hellman算法共同为该会话建立密钥。每一方的一部分私有数据,加上来自对方的一部分公共数据,通过这种算法计算,能够得出完全相同的密钥用于本次会话。
整个会话的通讯内容都使用该密钥进行加密。这个阶段使用的公钥/私钥对与用户验证身份用的SSH密钥是完全无关的。
经典Diffie-Hellman算法的计算步骤如下:
这个共享密钥的加密方式被称为二进制数据包协议(binary packet protocol)。该过程能够让双方平等的参与密钥生成的过程,而不是由单方掌握。这种共享密钥生成的过程是安全的,双方没有交换过任何未经加密的信息。
生成的密钥是对称式密钥,一方用于加密信息的密钥等同于另一方用于解密信息的密钥,而任何第三方由于不持有该密钥,是无法解密双方传递的内容的。
会话加密通道建立后,SSH开始进入用户认证阶段。
下一步,服务器验证用户身份以决定是否准许其访问。验证有不同的方式,选择的验证方式取决于服务器的支持。
最简单的验证是密码验证:服务器要求客户端输入密码,客户端输入的密码经过上述的通道加密传输给服务器。
虽然密码是加密过的,然而该方法仍然不被推荐,因为用户经常为了省事而使用过于简单的密码,而这类密码很容易就能够被自动化脚本破解。
最流行的验证方式是SSH密钥对,这也是当前最推荐的方式。SSH密钥对是非对称密钥,私钥和公钥分别用于不同的功能。
公钥用于加密,而私钥用于解密。公钥可以随意上传、共享,因为公钥的流通并不会危及到私钥的保密性。
SSH密钥对的验证过程起始于上一部分加密通道建立之后,其具体执行步骤如下:
简单来说,服务器端用公钥加密信息,客户端用私钥解密信息以证明自己持有私钥。该过程同时使用了对称加密和非对称加密,两种方式各有自己的功用。
命令如下:
用户名:为要登录的服务器B中已存在的用户账户名
IP地址:为服务器B的IP地址
-p 端口号:用来指定端口号,默认为22
第一次登录时,会提示如下提示:
大概意思是说,你正在访问的主机不能验证它的真实性,它的RSA key(当前访问主机的公钥)指纹是怎样的,你确定要继续连接吗?
输入yes继续,会提示,已永久把当前访问主机的RSA key添加到了已知主机文件(用户目录下,.ssh 文件夹中的knwon_hosts文件)中。之后再次 SSH 登录就不再有该提示了。
接着,输入登录账户的密码即可。
SSH 密码登录,需要服务器开启密码验证权限,编辑服务器SSH配置命令如下:
在 sshd_config 文件中,Protocol 2 下面 #PasswordAuthentication yes,将前面的#号去掉,保存退出。
公钥登录,即免密码登录。避免的每次登录都要输入的麻烦,也防止了中间人攻击。是SSH远程登录最常用的登录方式。
提示输入密钥对名称,直接回车,使用默认名称即可;
提示输入密码(使用私钥时,要输入密码),直接回车,不使用密码即可。
首先,登录服务器B,在进行下面的操作。
找到 #PubkeyAuthentication yes,删除 #号,保存退出。
重启 ssh 服务
也可指定验证私钥:
本地主机A,生成密钥对后:
sudo vim /etc/selinux/config
㈧ 如何实现安全的免密码ssh登录
Home �0�3Blogs �0�3Jianing Yang's blog Submitted by Jianing Yang on Fri, 2007-05-18 13:33 SSH免密码运维背景ssh实现了加密的远程登录. 但做为一个系统管理员,当需要操作的机器很多时频繁的输入密码往往会让你崩溃掉. 幸好你看到了这篇文章, 它将告诉你如何实现即安全又方便的免密码ssh登录.创建ssh公私钥首先你需要放弃使用的密码登录的方式,因为那种方式实在太让人崩溃了. 下面我们开始使用一种被称为“公私钥“认证的方式来进行ssh登录. “公私钥“认证方式简单的解释是你需要创建一对公私钥然后把公钥放到服务器上, 自己保留好私钥当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了我们现在来点实际的, 我们有两台机器: qian.jianingy.com(这是我们的服务器, 实际上它是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥对生成公私钥jianingy@nby:~$ ssh-keygen