ssh服务的最佳实践方案:
1.更换服务端口,不要使用默认的22号端口;
2.禁止使用sshv1;
3.合理的设置登录用户的黑名单和白名单;
4.设置空闲会话的超时时间,将其改的短一些;
5.需要利用防火墙来配合设置ssh的安全访问规则;
6.监听固定的IP地址而不是0.0.0.0;
7.如果必须使用口令认证机制,则需要使用足够复杂的密码;
~]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
~]# openssl rand -base64 30 | head -c 30 | xargs
8.建议最好使用基于密钥的认证机制;
9.禁止用户使用空密码登录;
10.禁止root用户直接进行远程登录;
11.限制ssh的密码失败频度和并发数;
12.做好日志记录,并经常分析日志内容;
OpenSSH:
在linux系统上实现ssh协议的应用程序;实施远程登录服务器端;
登录:login,登入
计算机终端设备通过输入用户账户标识和与之对应的口令的方式,被计算机验证的过程就是登录;
终端:Terminal,完整的称呼是"终端设备",是计算机中的外围设备,主要用于用户信息的输入和计算机计算结果的输出;
终端的分类:
物理终端:计算机本身的控制台设备;通常将其标识为"pty";在现代计算机上,物理终端与早期的计算机上的物理终端的意义不一样了。在现在的Linux系统上,物理终端设备被映射到/dev/console上,所有内核输出的信息都输出到console终端,除此之外,其他用户进程输出的信息一般都输出到虚拟终端或伪终端上;
虚拟终端:在现代的计算机中,通常将键盘+显示器组合称作"虚拟终端"或者"虚拟控制台",即一个虚拟的终端设备;通常将其标识为"tty";
串行终端:如果服务器上没有装配显卡设备,就可以使用串行终端设备连接计算机,通常将其标识为"ttyS";
模拟终端:伪终端,通过网络客户端工具或图形终端下开启的命令行终端,都称为伪终端;通常将其标识为"pts"
远程登录:
Telnet:
C/S结构,默认不允许管理员直接实施远程登录;
Client:telnet
Server:telnet-server
Socket:23/TCP
安装telnet-server, telnet程序包,本地光盘yum仓库中;
CentOS 5,6:
关闭防火墙和SELinux;
service iptables stop
setenforce 0
启动telnet服务:
chkconfig telnet on
service xinetd restart|reload
检测服务是否启动:
ss -tnl | grep :23
CentOS 7:
关闭防火墙和SELinux;
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables -F
setenforce 0
启动telnet服务:
systemctl start telnet.socket
检测服务是否启动:
ss -tnl | grep :23
注意:telnet服务出于安全考虑,默认不允许root用户直接登录;但可以使用普通用户登录之后,利用su命令切换至root用户登录;
SSH:Secure SHell;
其目的旨在取代较早的非常不安全的telnet协议,实现安全的远程登录;
C/S结构;
Client:Xshell,OpenSSH(ssh,scp,sftp),SecureCRT,sshsecureshellclient,putty;
Server:OpenSSH(sshd),dropbear
Socket:22/TCP
SSH提供的认证方式:
基于口令的认证:
使用远程服务器上的有效用户账户和该用户的口令,进行身份认证;
需要在网络中传递被加密的用户名和口令信息;有被拦截和破解的风险;
基于密钥的认证:
用户在客户端提供一对密钥,私钥保存在客户端,公钥保存在远程服务器的某个用户的家目录下;
使用私钥加密一段数据,如果服务器可以使用对应的公钥进行解密,则说明认证成功,可以继续后续通信;
在整个过程中不涉及用户名和密码等敏感信息的传递;
SSH协议:
v1:不安全,禁用;
v2:当前流行的安全应用协议;
Openssh
openssh应用程序的组成:
服务器端:
应用程序
sshd
配置文件
/etc/ssh/sshd_config
客户端:
应用程序:
ssh, scp, sftp
配置文件:
/etc/ssh/ssh_config
客户端程序:
ssh命令:
ssh - OpenSSH SSH client (remote login program)
ssh [options...] [user@]hostname [command]
常用选项:
-l login_name:指定此次使用哪个用户进行远程登录;如果使用了该选项,则hostname前面就不能再使用"user@";
注意:如果既没有指定此选项,有没有在hostname前面指定"user@"用户名前缀,SSH协议的客户端程序会默认使用客户端本地登录的用户账户作为此次远程登录的用户名;
-p port:指明访问服务器的哪个具体的服务端口;省略该选项,默认是22;
-b bind_address:指明此次访问服务器时的源IP地址;省略该选项,则从当前客户端所有有效的IP地址中,选择一个;
-X:支持X11转发功能,当客户端使用SSH协议远程连接到服务器时,可以在客户端打开图形界面的配置窗口;
-Y:支持受信任的X11转发;功能与-X相似;
-o option=value:
在实施远程连接时,引入特定的功能或以特定的方式对服务器进行访问;
注意:-o选项所能够使用的配置内容非常复杂,通常会将常用的此类功能选项直接写到ssh客户端的配置文件中(/etc/ssh/ssh_config);
格式为:
HOST pattern
OPTION1 value1
OPTION2 value2
...
基于密钥的认证机制:
1.创建密钥对儿:
ssh-keygen命令:
ssh-keygen — authentication key generation, management and conversion
格式:
ssh-keygen [-q] [-b bits] [-t type] [-P passphrase] [-f output_keyfile]
常用选项:
-q:安静模式;
-b bits:指定创建的密钥的长度;
RSA:最少768bits,默认是2048bits;
DSA:显式给出1024bits;
ECDSA:256bits, 384bits, 521bits;
ED25519:只是使用固定长度的密钥而忽略-b选项指定内容;
-t type:指明公钥加密算法的类型;
在SSHv2协议中可以使用上述四种算法;
-P passphrase:指定加密私钥文件的口令;
-f output_keyfile:生成的密钥文件保存的路径;
示例:
~]# ssh-keygen -t rsa -P '123456' -f .ssh/id_rsa
2.将上一步骤中生成的公钥复制到目标服务器指定用户的家目录中:
ssh-copy-id命令:
示例:
~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
3.登录测试:
在客户端执行下列命令:
~]# ssh -l USER hostname
~]# ssh USER@hostname
scp命令:基于ssh协议的cp命令;安全复制命令;
scp - secure copy (remote file copy program)
两种使用情形:
推送:PUSH
scp [option...] /PATH/FROM/LOCAL_FILE [user@]hostname:/PATH/TO/DESTINATION_REMOTE_FILE
拉取:PULL
scp [option...] [user@]hostname:/PATH/FROM/REMOTE_FILE /PATH/TO/LOCAL_FILE
常用选项:
-r:递归复制,可以复制目录;
-p:保留源文件中的权限信息;
-q:安静模式;
-P port:指定远程主机的sshd进程监听的服务端口;
sftp:
FTP over ssh
FTP over ssl(ftps)
C/S架构:
S:sftp-server, 由sshd进程管理的一个子服务项目,是sshd的一个子系统;在CentOS中默认是开启的;
C:sftp命令
sftp [user@]HOSTNAME
sftp> help
sftp> get
sftp> put
...
sshd程序:
配置文件:/etc/ssh/sshd_config
配置指令的格式:
指令 值
常用的指令:
Port 22:指明sshd服务进程要监听的端口号;建议改为非22号端口;
ListenAddress 0.0.0.0:指明sshd服务进程监听的IP地址,建议某个固定的IP地址;0.0.0.0表示当前主机上所有的可用IP地址;
Protocol 2:ssh协议的版本;
LoginGraceTime 2m:登录时,输入密码操作的最大时长;
PermitRootLogin yes:是否运行root用户直接进行远程登录;在生产环境中,强烈建议禁用此功能;
PasswordAuthentication yes:是否开启口令认证机制;
UseDNS no:是否允许使用DNS反向解析主机名;建议关闭此功能;
AllowUsers user1 user2 ...:设置登录用户的白名单;
AllowGroups group1 group2 ...:设置组的白名单;
DenyUsers user1 user2 ...:设置登录用户的黑名单;
DenyGroups group1 group2 ...:设置组的黑名单;
如果对此配置文件中的指令进行了修改,那必须要让sshd进程重新读取配置文件的内容才能使新配置生效;
CentOS 5、6:
~]# service sshd reload
CentOS 7:
~]# systemctl reload sshd
转载于:https://blog.51cto.com/chenliangdeeper/2097448