一、SSH服务
- 什么是ssh
专为远程登录和其他网络服务提供安全性的协议
能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据
- shh服务认证类型
- 基于口令认证
知道服务器账号密码,在ssh中连接账号
- 基于秘钥认证
必须为用户创建一对秘钥,在shh中连接时,客户端会向发出请求,用客户端秘钥进行验证,服务器收到后,在用户目录下寻找公钥,对比,一致
- SSH服务的安装
官方站点:http://www.openssh.com
服务名:sshd
服务端主程序:/usr/sbin/sshd
客户端程序:/usr/bin/ssh
服务端主配置配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config
- 配置openssh服务端
sshd服务的配置文件默认位于/etc/ssh/sshd_config
- Port 22 监听的端口(默认22),也可以使用多个Port,即重复使用 Port 这个配置项。
#例如想要开放sshd端口为 22和222,则添加如下内容
Port 22
Port 222
#然后重新启动sshd这样就好了。 建议大家修改 port number 为其它端口。防止别人暴力破解。
- ListenAddress 0.0.0.0 监听的IP地址(默认监听所有IP)
设置sshd服务器绑定的IP地址,0.0.0.0 表示侦听所有地址, 这个值可以写成本地IP地址也可以写成所有地址
- SyslogFacility AUTHPRIV 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV。
sshd服务日志存放在: /var/log/secure
为什么sshd配置文件中没有指定日志,但日志却存放在了:/var/log/secure ?
# vim /etc/rsyslog.conf #查看
- LogLevel INFO 日志记录的等级!INFO级别以上。
- UseDNS no 禁用dns反向解析,一般来说,为了要判断客户端来源是正常合法的,因此会使用DNS去反查客户端的主机名,不过如果是在内网互连,设定为 no 会让联连接速度比较快。
- PermitRootLogin no 禁止ROOT用户远程登录
- PermitEmptyPasswords no 禁止密码为空的用户远程登录
- LoginGraceTime 2m 限制用户登录验证过程的时间(默认为2分钟),即在多久时间内没有成功连上 SSH server 就强迫断线!若无单位则默认时间为秒。可以根据实际情况来修改实际
- MaxAuthTries 6 限制用户登录验证过程的最大重试次数
- DenyUsers zhangsan lisi 拒绝XX用户远程登录系统,其他均允许
- AllowUsers jerry admin@61.23.24.25 允许jerry在任何何IP的主机上远程登录,允许admin只能在主机61.23.24.25登录 ,其他均拒绝(不要同时使用AllowUsers和DenyUsers配置)
- PasswordAuthentication yes 是否启用密码验证
- PubkeyAuthentication yes 是否启用密钥对验证
- AuthorizedKeysFile .ssh/authorized_keys 指定保存各用户公钥内容的数据文件位置,默认保存用户公钥信息的文件位于(服务器某个用户宿主目录下的)
- PrintLastLog yes 显示上次登入的信息,如上次登入的时间、地点等等,默认是yes
- PrintMotd yes 登入后是否显示出一些信息,即打印出 /etc/motd这个文档的内容。
例如给sshd服务添加一些警告信息
修改/etc/motd
# cat /etc/motd
# echo '欢迎进入192.168.10.30服务器,注意:“禁止私自”使用“rm -rf”命令,如使用请联经理!请配合!'> /etc/motd
测试:连接ssh,显示结果
配置文件sshd_config修改后,重启sshd服务
#systemctl restart sshd
- 使用SSH客户端程序
- 方式1: ssh 用户名@服务器地址
方式2: ssh -l 用户名 服务器地址
方式3: ssh 服务器地址(缺省时会尝试以当前的本地用户名进行登录)
- 使用scp命令远程复制文件/目录
方式1: scp 用户名@服务器地址:源文件 目标路径
方式2: scp 本地文件 用户名@服务器地址:目标路径
- 使用图形客户端软件xshell
安装lrzsz 可以在Linux 和 windows直接相互传文件,
rz命令从本地上传文件到服务器
sz命令件从服务器下载文件到本地
- sshd服务防止暴力破解
方法1:配置安全的sshd服务
- 密码复杂
- 修改端口
- 不允许root登录,添加普通账号,授予root权限
- 不允许密码登录,用秘钥登录
方法2:秘钥认证sshd认证
- 创建秘钥对
ssh-keygen -t rsa
Id_rsa是私钥文件
Id_rsa.pub是公钥
- 公钥文件上传服务器
ssh-copy-id -i root@192.168.1.1
输入密码
ll -d /root/.ssh
ll /root/.ssh
- 客户端秘钥对验证
ssh root@192.168.1.1
sudo -i
whoami
Xshell使用密钥对验证连接远程主机192.168.1.1
将私钥文件拷贝到windows主机上,执行sz命令(id_rsa)由lrzsz软件包提供
在Xshell新建连接192.168.1.1,在身份验证选择 “Public key”,通过浏览按钮导入拷贝私钥
方法3:通过pam模块来防止暴力破解ssh
# vim /etc/pam.d/sshd
在第一行下面添加一行:
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200
#尝试登陆失败超过3次,普通用户600秒解锁,root用户1200秒解锁
手动解除锁定:
查看某一用户错误登陆次数:
#pam_tally2 --user 用户名
例如,查看zhangsan用户的错误登陆次数:
#pam_tally2 --user zhangsan
清空某一用户错误登陆次数:
#pam_tally2 --user 用户名 --reset
例如,清空zhangsan用户的错误登陆次数,
#pam_tally2 --user zhangsan --reset
- 在远程计算机上运行命令
输出重定向至本地文件:
#ssh user@host ‘command1 ; command2’ > log.local //单引号
例如:ssh root@192.168.36.128 ‘hostname;ifconfig’ > log.local
输出重定向至远程文件:
#ssh user@host ‘command1 ; command2 > log.remote’ //单引号
例如:ssh root@192.168.36.128 ‘hostname;ifconfig > log.remote’