SSH远程登录

TSL 传输层安全协议 -->ssl传输层安全协议的实现方法和工具 -->ssh是利用到ssl部分功能的一种安全登录服务
使用ssh代替telnet (telnet是明文传输 极不安全)
ssh 1,2 版本1有大量漏洞,已被破解,所以尽量使用版本2

#whereis sshd
Openssh
openssh 客户端
open-askpass
openssh-clients
openssh-server 服务端

/etc/ssh
ssh_config 客户端配置文件
sshd_config 服务端配置文件
2
ssh_host_dsa_key
ssh_host_dsa_key.pub
1
moduli
ssh_host_key
ssh_host_key.pub

ssh_host_rsa_key
ssh_host_rsa_key.pub

ssh可以提供端口转发 可以将不安全的通信经过ssh转发实现加密通信 (如:可以通过ssh转发邮件)

ssh认证:
主机认证:用户验证主机的身份
用户认证:主机验证用户的身份
    -->基于口令
    -->基于密钥
    -->基于主机(不安全 基本没人用)
主机认证方法:
    服务端使用自己私钥加密一段数据 并发给客户端 客户端试图从某个文件中找到一    段跟密文匹配的公钥 如果能解密 则证明服务端身份 如果无法找到 或者无法解密
    一般情况下 远程主机的公钥 在客户端主机的~/.ssh/known_hosts (已有的远程主机公钥)  ~/.ssh/unknown_hosts (远程主机公钥黑名单)
    如果都没有找到 则在用户界面显示 服务端的RSA 提示用户是否连接
    no -->断开 下次连接仍然提示
    yes-->加入known_hosts 下次连接不再提示
客户端认证:
拿到服务端公钥之后 用户随机生成对称密钥 用服务端公钥加密对称密钥 发送给服务端
之后的所有通信过程由此对称密钥加密 一般这种对称密钥会定期(比如每隔30min)自动更换

用户生成一对密钥对 将公钥发送给服务器上的此用户账户的家目录下~/.ssh/authorized_keys2
一般 身份认证时 密钥优先

ssh服务配置文件:/etc/ssh/sshd_config

Port 22 是否开放22端口
如果开放 会被扫描到 招来***
Protocol 启用哪种协议? 放前面的优先 所以2 放前面
AddressFamily any     IPv4/v6 都启用
ListenAddress x.x.x.x    监听哪个或者那些地址0.0.0.0代表所有
#KeyRegenerationInterval 1h 会话密钥多长时间更换一次
#ServerKeyBits 768
#PermitRootLogin yes    是否允许root登录 默认允许
            建议启用此项 改为no 不允许 登录时先用普通用户登录 然后
            再切换到root 进行管理
#LoginGraceTime 2m    宽限期 接受用户提供账户密码时 如果用户无响应 2min自动断开
#StrictModes yes    检查用户家目录权限 如果用户家目录权限全局可写才能登录
#Strictkey checking modes    yes 问对方是否识别 no 不问对方一律通过?
#MaxAuthTries 6        最大尝试次数

#PubkeyAuthentication yes 是否开启基于密钥的认证
#AuthorizedKeysFile     .ssh/authorized_keys 如果开启密钥认证 那么远程服务器的用户公钥存放位置
PasswordAuthentication yes    是否开启基于口令的认证
ChallengeResponseAuthentication no
#PrintMotd yes    是否打印Motd
#Banner /etc/issue.net    对用户的警告和提示信息 从此文件中读取
Subsystem       sftp    /usr/libexec/openssh/sftp-server    子系统是否可使用sftp
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV    使用系统syslog记录日志
#LogLevel INFO    日志级别 QUIET FATAL ERROR INFO DEBUG DEBUG2 DEBUG3 (区别于syslog的日志级别)

/var/log/secure        登录日志在此位置查看

AllowUsers    只有明确定义的才允许
AllowGroups
DenyUsers    黑名单
DenyGroups
如果Allow和Deny全都启用 当双方无冲突 则Deny将会被忽略
如果某个用户在Allow和Deny中都有定义 则Deny他
#AllowTcpForwarding yes 是否允许使用TCP做转发
#X11Forwarding no    是否允许使用X11图形界面转发

PortForwarding 端口转发

-L    客户端开放3025 连接服务端的sshd的3025 然后由客户端将sshd连接映射到它的25端口
-R    客户端启动sshd开放3025 让远程服务器开启随机端口登录自己的3025 自己将自己的3025当成邮件服务器的25 自己将邮件发给自己的3025 由3025---加密--->服务器的随机端口 由服务器的随机端口 转发给服务器自己的25

L本地转发(本地监听3025) R远程转发(远程监听3025)
谁发起连接 谁监听3025
本地转发比较可靠

进程在:/usr/sbin/sshd
#service sshd start
#netstat -tnlp
#

CE
只允许192.168.0.0/24网段的sshd访问
vim /etc/hosts.allow    里面写的是服务名?进程名?
    +>sshd: 192.168.0.
vim /etc/hosts.deny
    +>sshd: ALL
基于用户的访问控制:
在sshd_confing的用户控制列表定义

将自己主机生成的公钥文件追加到远程主机的用户家目录
#cat "公钥文件" |ssh username@host 'cat - >> /username/.ssh/authorized_keys'
#ssh-copy-id username@host