第四章、远程访问及控制
SSH服务
SSH基础
什么是SSH服务器?
- SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;
- SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令;
- SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
SSH客户端<--------------网络---------------->SSH服务端
SSH优点
- 数据传输是加密的,可以防止信息泄漏
- 数据传输是压缩的,可以提高传输速度
常见的ssh协议
客户端: Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient
OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
执行"*systemctl start sshd*"命令即可启动sshd 服务
sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,除了2之外还有1(有漏洞)
*sshd服务的默认配置文件是/etc/ssh/sshd_config* ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
服务名称:sshd
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_configan>
SSH原理
公钥传输原理
-
客户端发起链接请求
-
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
-
客户端生成密钥对
-
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
-
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
-
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
-
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都
会被加密
如何使用
ssh命令 是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。
语法:
ssh (选项) (参数)
选项
-l:指定连接远程服务器登录用户名[远程主机用户名]
-p:指定远程服务器上的端口;
-t ac不能之间连 a连接b再连接c 跳板连接
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-N:不执行远程指令;
-o:指定配置选项;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
加固设置
[root@localhost .ssh]# vim /etc/ssh/sshd_config
远程复制scp
[root@localhost .ssh]# cd /opt/
[root@localhost opt]# rm -rf *
[root@localhost opt]# ls
[root@localhost opt]# mkdir test
[root@localhost opt]# cd test/
[root@localhost test]# cp /etc/passwd /etc/shadow ./
[root@localhost test]# ls
passwd shadow
[root@localhost test]# cd ../
[root@localhost opt]# scp -r test/ 192.168.154.20:/mnt/
root@192.168.154.20's password:
passwd 100% 2107 3.3MB/s 00:00
shadow 100% 1197 2.8MB/s 00:00
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
test
sftp传输文件
登录当前用户的家目录
[root@localhost opt]# sftp 192.168.154.20
root@192.168.154.20's password:
Connected to 192.168.154.20.
sftp> ls
anaconda-ks.cfg initial-setup-ks.cfg wuwei 下载 公共
图片 文档 桌面 模板 视频
音乐
sftp> put -r test/
Uploading test/ to /root/test
Entering test/
test/passwd 100% 2107 5.5MB/s 00:00
test/shadow 100% 1197 5.1MB/s 00:00
sftp> exit
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg test wuwei 公共 模板 视频 图片 文档 下载 音乐 桌面
get下载
put上传 #默认上传到/root/
put -r 文件夹
exit bye quit 退出
免密登录
秘钥对验证
关键点
- 免密登录的关键点在于理解谁登录谁。
- A 生成的公钥给 B,也给 C、D,则 A 可以直接免密 SSH 登录 B、C、D
A 生成密钥
-
在 A 机器上输入命令:
ssh-keygen
ssh-keygen --help查看加密算法 ,可以默认不写
- 根据提示回车,共有三次交互提示,都回车即可。
-
生成的密钥目录在:/root/.ssh
-
写入:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
-
测试:
ssh localhost
把 A 的公钥发给 B
- 假设 B 机器的 ip:
192.168.1.105
- 则在 A 机器上输入:
ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.1.105
,根据提示输入 B 机器的 root 密码,成功会有相应提示
测试 A 免密登录到 B
- 在 A 机器上输入命令:
ssh -p 22 root@192.168.1.105
,则会相应登录成功的提示
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:
SHA256:p3X5bjVzhcZ1t/WSbywIlkjHDzBo4Z4GfUoXXeDABTw root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .=**oo. |
| oo E== =|
| ..+.o+.+ . +*|
| + =. + ..*.o|
| = S.o.oo +.|
| . + ....o*|
| . .++|
| .. |
| .. |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@192.168.154.20
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.154.20 (192.168.154.20)' can't be established.
ECDSA key fingerprint is SHA256:FzwuOFWa4C36FahaQIDiTJzJ431z7IHvEe9cfP07N2c.
ECDSA key fingerprint is MD5:9b:a0:39:8b:c4:f6:cb:76:8e:4c:f6:5e:47:f0:8a:72.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.154.20's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '22' 'root@192.168.154.20'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost ~]# ssh 192.168.154.20
Last login: Fri Mar 25 03:56:11 2022 from 192.168.154.50
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!