ssh (secure shell) 是一种以 安全方式 提供 远程登陆 的 协议
在此之前, 一般使用的是 FTP 或 Telnet 来进行远程登陆
FTP与Telnet 以明文的方式, 在网络中发送账户密码和数据, 很不安全
因此, 首选使用ssh协议来远程登陆linux系统
安装sshd服务程序
sshd是基于SSH协议开发的远程登陆服务程序
sshd提供两种安全验证方法
1.基于口令 -- 账户密码
2.基于密钥 -- 更安全的方法
在rhel7中已默认安装了sshd服务程序, 如果没安装可自行安装
不确定有没有安装的话, 也可使用 : yum list installed | grep ssh 查看
sshd服务命令格式为: ssh [参数] 主机ip
口令验证登陆:
如下约定: 主机1为本地主机, 主机2为远程主机
不指定远程账户登陆:
ssh -p 22 192.168.43.12
我使用主机1的jack账户远程主机2
而根据提示,要求输入主机2 jack账户 的密码, 但是主机2上并不没有jack账户
因此,不指定远程账户登陆时, 你使用哪个账户名远程, 要求对方有相同的账户名才行
指定远程账户登陆:
ssh -p 22 sun@192.168.43.12
我使用主机1的jack账户远程主机2时, 指定使用主机2的sun账户登陆
所以只要正确输入主机2的 sun账户的密码就可以成功登陆
禁止root用户远程登陆:
root权限最高, 禁止root登陆可降低风险
此时就需要修改主机2的sshd服务配置文件 -- /etc/ssh/sshd_config
添加一行 PermitRootLogin no -- 表示不允许root登陆
重启sshd服务程序: systemctl restart sshd
ssh -p 22 root@192.168.43.51 登陆不上, 不影响其它账户登陆
密钥验证登陆:
在实际生产中使用口令验证的方式, 是有可能被暴力破解, 存在一定的风险
可以给主机2的sshd服务程序配置密钥验证, 使sshd服务更安全
step1: 在主机1上使用ssh-keygen命令, 生成本地 "密钥对" (包含公钥与私钥)
随后三次确定即可, 会在~/.ssh/ 下面生成 id_rsa 和 id_rsa.pub两个文件
step2 : 在主机1上再次使用命令, 将公钥传送至主机2
# ssh-copy-id 主机2的ip
输入yes, 然后再入主机2的对应账户的密码 (比如账户: sun)
执行完以后, 主机1在远程主机2时, 不再需要密码 (当然仅限于sun这个账户)
step3 : 修改主机2的ssh配置文件
如下将PasswordAuthentication 改为no -- 限制所有口令验证
这样就只有主机1可免密登陆主机2 -- 仅可远程主机2的sun账户
最终, 只有主机1的jack账户与root账户可免密远程登陆主机2的sun帐户
为什么只有主机1的jack与root可以呢?
可能是因为使用jack生成的密钥时, 存放在jack家目录中的, 上传公钥时, 也是使用的jack账户
远程传输命令
远程登陆上以后, 可以上传文件, 也可以下载文件
scp是一个基于ssh协议, 在网络间安全传输数据的命令, 它传输的所有数据都将进行加密
scp能使用的前提是可远程登陆, 即需要像上面一样, 先作好远程配置
传输文件时需要以绝对路径的形式, 如果传输文件夹, 则需要使用参数 -r (表示递归)
上传: scp [参数] 本地目录 远程ip:目录
事先配置好远程, 直接使用scp就可以传输文件了
/home/sun是 主机2 用户sun的主目录(权限问题,只能上传到用户家目录)
下载: scp [参数] 远程ip:目录 本地目录 -- 和上传一样, 只是 交换 这两个的位置
注: 使用scp, 不是登陆远程, 只是scp命令, 不操作远程主机
同样由于权限问题, 只能下载文件到相应家目录中
不间断会话
如果在执行任务时, 突然断网, 或者关闭窗口, 则正在执行的任务, 就只有中断
如果是正在远程控制某台主机, 则会失去对其控制
screen服务程序可以解决这样的问题 (即将任务不丢失)
screen 是一个能够将会话延续的服务程序
screen以用户为单位, 即各用户创建的screen会话是独立的
安装screen服务程序:
yum install screen
创建screen会话
screen -S 会话名 它会创建一个新窗口, 这个窗口的名称就是会话名
这个窗口可以关闭, 但是它会进入后台, 在后台保持着
然后, 根据会话名, 可以恢复这个窗口, 即 任务不丢失
创建的新窗口如上所示, 没有任何内容, 现在就可以在这个新窗口中执行任务了(和平常执行任务一样)
这个窗口仅仅是 拥有进入后台的功能
创建会话窗口, 也可以直接使用 screen + 命令, 比如: # screen ssh sun@192.168.43.12
但是会话名称就不好记, 虽然效果一样, 恢复会话的不一定能分清楚是哪个会话
恢复screen窗口
screen -r 会话名
发生极端情况, 断网, 关闭窗口, 等情况, 我们可以根据会话名称将其恢复过来, 继续任务
如果不记得会话名称, 则可以使用screen -ls 查看
回车就可以恢复会话
远程会话共享
远程会话共享, 如果主机A 和 主机B 都远程到同一台ssh主机上
则主机A, 主机B 可共享ssh主机上的screen会话
比如主机A远程上ssh主机, 然后使用screen -X share 创建会话share
然后主机B再远程上同一个ssh主机, 那么主机B 可以直接使用及关闭share会话