##sshd远程连接的优化
版主QQ:2559721591 资料网站:http://rshare.ys168.com
网络环境:
ssh服务器(虚拟机):192.168.10.25
ssh客户机(物理机):192.168.10.1
ssh:是安全的外壳的缩写(Secure Shell)。是专门为远程登录会话和其他网络服务提供安全性的协议。
linux的ssh远程登录软件:openssh,默认端口是22。
显示远程连接过程:ssh -v root@192.168.10.25
#软件安装
yum install -y openssh-server openssh-clients openssh
说明:服务端:openssh-server
客户端:openssh-clients
通用程序:openssh
密钥验证:openssh-askpass
服务基本管理:
重启服务:service sshd restart
设为开机启动:chkconfig sshd on
常用命令:ssh、scp、ssh-keygen、ssh-copy-id、sftp
ssh远程登录:
语法:ssh [选项] 用户@远程IP [命令]
选项:-v 显示过程
例:远程执行命令:ssh root@192.168.10.25 'ls /;ifconfig'
远程登录:ssh root@192.168.10.25
scp命令:
功能:采用ssh协议上传、下载文件。
语法:scp -rv 源文件 目标文件
选项:-r 递归复制目录 -v 显示过程 -P 指定端口
实例:上传本机/etc目录到root@192.168.10.25:/tmp/目录。
scp -rv /etc root@192.168.10.25:/tmp/ //上传文件
ssh root@192.168.10.25 ls /tmp/et* //验证结果
实例:上传root@192.168.10.25:/etc目录到本机/opt目录。
scp -rv root@192.168.10.25:/etc /opt/ //下载文件
ls /opt/ //验证结果
#问题:ssh服务连接慢的解决。
说明:sshd_config是服务器配置,ssh_config是客户端配置文件。
首先:vi /etc/ssh/sshd_config 修改如下内容:
UseDNS no //禁用DNS解析功能(122行)
GSSAPIAuthentication no //禁用GSSAPI授权功能(81行)
然后:vi /etc/ssh/ssh_config //客户端配置文件,修改如下内容:
GSSAPIAuthentication no //禁用GSSAPI授权功能(81行)
最后:1、重启sshd服务:service sshd restart
2、用客户机远程登录测试:ssh root@192.168.10.25 ifconfig
##需求:实现ssh免密码远程登录。采用id_rsa私钥、id_rsa.pub公钥文件自动验证功能。
RSA签名和验签过程:
1.签名过程:
client提取消息m的消息摘要h(m),并使用自己的私钥对摘要h(m)进行加密,生成签名s。
client将签名s和消息m一起,使用server发过来的公钥进行加密,获得密文c,发送给server。
2.验签过程:
server接受到密文后,用自己的私钥对其解密,获得明文消息m和签名s。
server使用client的公钥解密数字签名s,获得消息摘要h(m)。
server使用相同的方法提取消息m的消息摘要h(m)与上一步解密得到的h(m)进行比较,如果相同则验签成功。
公钥和私钥须知:
A、公钥是给别人的:
1、发送密文使用公钥加密
2、验证签名使用公钥验证
B、私钥是自己保留的
1、接受密文使用私钥解密
2、发送签名使用私钥签名
注意:上述过程逆转是不行的,比如使用私钥加密,使用公钥解密是不行的。
实现思路:1、在客户机用ssh-keygen生成id_rsa私钥、id_rsa.pub公钥文件。
2、将客户机的id_rsa.pub公钥文件上传给ssh服务器指定的用户家目录。
3、在客户机远程登录,测试是否免密码登录。
注意:公钥和私钥验证是识别身份是根据客户机的主机名来确认。上传客户机的公钥后,一定不要再修改客户机的主机名,否则公钥和私钥无法认证。
实施步骤:
1、在客户机生成公钥和私钥(交互式):ssh-keygen -t rsa
(非交互):ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
选项说明:-t指定加密算法 -f指定密钥文件 -N指定加密密码
#生成成对的公钥和私钥密钥。
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:以下为密钥指纹标识符
aa:0e:89:eb:83:55:44:d1:a1:ed:2d:81:aa:4e:47:29 root@localhost.localdomain
2、在客户机上传公钥给服务器:
方法一:ssh-copy-id root@192.168.10.25
方法二:ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.25
3、在客户机测试远程控制:ssh root@192.168.10.25 ifconfig
附加任务:扫描192.168.10.25主机上的key文件内容。
ssh-keyscan 192.168.10.25
#ssh服务端配置文件安全加固。
#修改服务器主配置文件:vi /etc/ssh/sshd_config
Port 22
ListenAddress 0.0.0.0
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#LoginGraceTime 2m //登录宽限期为2分钟
#PermitRootLogin yes //允许root登录
#StrictModes yes //yes必需保证存放公钥的目录的属主与登陆用户名是相同的
#MaxAuthTries 6 //密码错误重试6次
#MaxSessions 10 //最大10个会话
#RSAAuthentication yes //启用RSA验证
#PubkeyAuthentication yes //启用公钥验证
#AuthorizedKeysFile .ssh/authorized_keys //公钥保存的文件
#PermitEmptyPasswords no //禁止空密码登录
PasswordAuthentication yes //启用密码验证
Subsystem sftp /usr/libexec/openssh/sftp-server //启用子系统sftp共享服务
#sftp客户端
功能:采用sftp协议登录到ssh服务器,访问服务器上的文件,在服务器和客户机之间传输文件(上传、下载)。
语法:sftp 用户名@远程IP
实例:sftp root@192.168.10.25
常用命令:
说明:sftp登录成功后,可以执行大多数文件管理的shell命令。
help或? //显示命令帮助
pwd //显示服务器工作路径
!pwd //显示本地工作路径
ls //显示服务器当前目录的文件列表
cd /tmp //切换服务器路径到/tmp目录
!ls //查看本地文件列表
lcd /etc //切换本地路径到/etc
get 源 目标 //下载文件
put 源 目标 //上传文件
bye //退出登录
服务器端配置文件小结:
[root@localhost ~]# vim /etc/ssh/sshd_config 配置文件中主要的三部分内容如下
1、常见SSH服务器监听的选项如下:
Port 22 //监听的端口为22
Protocol 2 //使用SSH V2协议
ListenAdderss 0.0.0.0 //监听的地址为所有地址
UseDNS no //禁止DNS反向解析
必做:找到UseDNS选项,默认为yes,会影响连接速度,将yes改为no。
2、常见用户登录控制选项如下:
PermitRootLogin no //禁止root用户登录
PermitEmptyPasswords no //禁止空密码用户登录
LoginGraceTime 2m //登录验证时间为2分钟
MaxAuthTries 6 //最大重试次数为6
AllowUsers user //只允许user用户登录,与DenyUsers选项相反
3、常见登录验证方式如下:
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用秘钥验证
AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件