17.Linux 远程访问与远程⽂件传输

本文介绍了Linux系统的远程访问方法,重点比较了telnet和SSH的使用,包括SSH的安装、配置和安全特性,以及SCP和SFTP在文件传输中的应用。还涉及了SSH密钥对、免密登录和安全进阶措施,如防止中间人攻击、禁用root和密码登录。
摘要由CSDN通过智能技术生成

17.1 Linux远程访问概述

基于命令⾏远程访问 - 常⻅⽅式
#1.telnet - 主要使⽤⽹络设备访问场景,不安全,传输数据不加密
#2.SSH - Secure Shell - 安全壳 , 主要使⽤在服务器管理领域
#无论网络设备远程访问,服务器远程访问, 如果使⽤安全加密⽅式进⾏远程访问,需要使⽤到SSH。

17.2 Telnet-远程访问

在这里插入图片描述

访问主机 - 安装telnet客户端
被访问服务器(路由器/交换机⽹络设备) - 安装telnet服务端 ,
⼀般来讲 ,网络设备中telnet服务端软件出⼚已经安装好了。
对于服务器通常来讲telnet软件客户端需要在服务器上单独安装。

#在服务器上安装 telnet-server/xinetd
yum install -y telnet-server #服务端
yum install -y xinetd

#开启xinetd服务/telnet
systemctl start xinetd.service && systemctl enable xinetd.service
systemctl start telnet.socket && systemctl enable telnet.socket

#查看23端⼝是否开启 , 23号服务端⼝是telnet的服务端⼝
netstat -nltp | grep 23

#在windows访问主机上进⾏ telnet 访问
telnet 访问主机IP地址

C:\Users\Administrator>telnet 192.168.8.151
‘telnet’ 不是内部或外部命令,也不是可运⾏的程序或批处理⽂件。 #该提示表示,当前访问主机没有开启telnet 客户端 。
解决办法
1.系统中开启telnet客户端
控制⾯板 - 程序与功能 - 打开或关闭windows程序 - 开启telnet-client
2.使⽤远程访问软件进⾏访问
SecureCRT/putty/Xshell etc…

#在linux访问主机上进⾏ telnet 访问
telnet 访问主机IP地址
[root@linux-server2 ~]# telnet 192.168.8.151
bash: telnet: command not found… #该提示表示,当前访问主机没有开启telnet 客户端,解决办法:
安装telnet-client
yum install -y telnet
#退出登录 - exit

17.3 SSH-远程访问基础

在这里插入图片描述
#在 Linux中,SSH客户端和服务端软件的名称分别如下:
SSH客户端:OpenSSH Client,程序名为ssh。
SSH服务端:OpenSSH Server,程序名为sshd。
#这两个软件都是通过yum包管理器进⾏安装和管理的。可以使⽤以下命令来安装:
安装客户端:
sudo yum install openssh-clients
安装服务端:
sudo yum install openssh-server
检查:
rpm -qa | grep -i openssh-clients
rpm -qa | grep -i openssh-server

#检查服务端的服务
在访问SSH服务时,服务器的 sshd.service应该处于active状态 ,并且默认SSH-22号端⼝,应该处于监听状态
[root@linux-server2 ~]# systemctl is-active sshd.service
active
[root@linux-server2 ~]# netstat -ntlp | grep -i 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
1139/sshd: /usr/sbi
tcp6 0 0 :::22 ::😗 LISTEN
1139/sshd: /usr/sb
#使⽤linux. ssh client发起访问。ssh client不需要启动服务,随时访问直接使⽤程序进⾏发送SSH数据
#只需要确保客户端存在/安装在系统中即可

#使⽤linux ssh client 进⾏SSH访问
ssh 登录账户@登录地址
#账户通常建议使⽤运维账户登录,不建议直接使⽤root账户,通过权限委派⽅式进⾏操作
ssh tom@192.168.8.151
[root@linux-server2 ~]# ssh tom@192.168.8.151 #发送SSH登录
#⾸次登录询问
#是否接受服务器指纹
#保存在 ~/.ssh/known_hosts

#ssh-ed25519/ecdsa-sha2-nistp256 - 根据服务器使⽤的不同算法,存储指纹数量不同
#在 ~/.ssh/known_hosts - 主要⽤来存放对应服务器指纹信息,进⾏安全防范

#使⽤windows ssh client 进⾏SSH访问
#在windows中,建议使⽤⼯具⽅式进⾏登录 secureCRT…etc等

#也可以使⽤命令⽅式,不是所有windows版本系统系统都⽀持
C:\Users\Administrator>ssh tom@192.168.8.151

17.44 linux之间⽂件传输-scp

在这里插入图片描述
#SCP是⼀种安全可靠的⽂件复制协议,可⽤于在不同计算机之间传输数据。
#SCP是Secure Copy的缩写,是⼀种⽤于在不同计算机之间安全地复制⽂件和⽬录的协议。它使⽤SSH(Secure
Shell)协议进⾏加密和认证,可以在不安全的⽹络环境下,安全地传输数据。(使⽤SCP之前,服务器开启SSH服务)
#SCP最初由UNIX系统上的OpenSSH软件实现,并已成为许多操作系统中的标准⼯具,例如Linux、macOS和Windows
等。与其他⽂件传输协议相⽐,SCP具有以下特点:
1.安全性:SCP使⽤SSH协议进⾏通信,在传输过程中可以对数据进⾏加密和认证,避免了⽹络攻击和信息泄露的
⻛险。
2.简单易⽤:SCP具有简单易⽤的命令⾏界⾯,⽤户可以通过简单的命令快速完成⽂件的传输。
3.可靠性:SCP在传输过程中会校验⽂件的完整性和正确性,确保⽂件被完整地复制到⽬标主机。
4.跨平台性:SCP⽀持多种操作系统和平台,例如Windows、Linux、macOS等,具有良好的可移植性。
#SCP远程拷贝⽂件
scp 当前需要拷贝文件 远程账户@远程服务器地址:远程路径
[root@linux-server2 ~]# scp /root/888.txt
tom@192.168.8.151:/home/tom/Desktop/888.txt
tom@192.168.8.151’s password:

#SCP远程拷⻉⽂件路径
scp -r 当前需要拷⻉⽂件路径 远程账户@远程服务器地址:远程路径
[root@linux-server2 ~]# scp -r /root/f1 tom@192.168.8.151:~/Desktop/

#*⚠
注 :远程拷⻉⽂件路径,为了最⼤化保存原有数据都相关信息,建议使⽤打包⽅式进⾏传递,然后解包
[root@linux-server2 ~]# tar -jcvf f1.tar.bz2 f1

[root@linux-server2 ~]# scp f1.tar.bz2 tom@192.168.8.151:~/Desktop/
tom@192.168.8.151’s password:

#从远端拷⻉到本地 , ⽬标路径和源路径 - 相反
[root@linux-server2 ~]# scp tom@192.168.8.151:~/Desktop/888.txt /root/888.txt
tom@192.168.8.151’s password:

17.5 linux之间⽂件传输-sftp

SFTP

#SCP和SFTP虽然都是⽤于⽂件传输的协议,但在安全性、功能、可移植性等⽅⾯存在不同的优缺点,根据需要选择合
适的协议进⾏⽂件传输。
#SCP和SFTP都是⽤于在计算机之间基于SSH协议进⾏⽂件传输的协议,但它们有以下区别:
1.安全性:SFTP具有更⾼的安全性和可靠性。SFTP可以对传输过程中的操作进⾏记录和审计,能够追踪和发现异
常⾏为,⽽SCP则⽆法实现这⼀功能。
2.功能:SFTP⽐SCP功能更加丰富,⽀持⽂件的上传、下载、修改、删除、重命名等操作,⽽SCP只能进⾏⽂件
的上传和下载。此外,SFTP相对于SCP来说,具备更多的功能特性,例如⽂件权限管理、断点续传、⽬录浏览等,能够
更好地保障⽂件传输过程的安全性和完整性。
3.可移植性:SFTP相对于SCP来说,更容易在不同平台之间实现和移植,因为SFTP只需要使⽤通⽤的SSH协议和
端⼝号就可以进⾏连接和通信,⽽SCP则需要依赖特定的SCP客户端和服务器。

SFTP登录

sftp 远端账户@远端地址
[root@linux-server2 ~]# sftp tom@192.168.8.151
tom@192.168.8.151’s password:

SFTP远程上传⽂件

put local_file [remote_path]
-r 指定上传⽂件路径(⽂件夹)
#*⚠
注 :远程拷⻉⽂件路径,为了最⼤化保存原有数据都相关信息,建议使⽤打包⽅式进⾏传递,然后解包
sftp> put /root/888.txt /home/tom/Desktop/
Uploading /root/888.txt to /home/tom/Desktop/888.txt
sftp> put -r /root/f1 /home/tom/Desktop/
Uploading /root/f1/ to /home/tom/Desktop/f1
Entering /root/f1/

SFTP远程下载⽂件

get remote_file [local_path]
-r 指定上传⽂件路径(⽂件夹)
sftp> get /home/tom/Desktop/999.txt /root/
Fetching /home/tom/Desktop/999.txt to /root/999.txt

退回到本地

sftp> exit

17.6 windows与linux之间⽂件传输

#winscp⼯具
https://winscp.net/eng/index.php #下载网址

#在windows⼀种基于视窗图形化界⾯远程传输工具,使⽤拖拽⽅法进⾏⽂件远程传输

#winscp只建议传⽂件,不建议修改配置⽂件 | windows字符集底层编码和linux有所不同,有可能导致出问题 在这里插入图片描述
在这里插入图片描述

17.7 SSH-远程访问密钥优化

##密钥对登录

基于两把钥匙⽅式进⾏授权认证,密钥对通过 RSA 算法⽣成
1.钥匙01 - public-key - 公钥
2.钥匙02 - private-key -私钥
#⚠
注:⼀把公钥对应⼀把私钥,⼀把私钥对应⼀把公钥

#使⽤SSH密钥对可以提⾼Linux服务器的登录安全性和便利性。以下是使⽤SSH密钥对进⾏优化登录的步骤:
1.⽣成SSH密钥对。在本地计算机上打开终端,执⾏以下命令:
ssh-keygen -t rsa
然后按照提示输⼊⽂件名、密码等信息,即可⽣成⼀对公私密钥。
[root@linux-server2 ~]# ssh-keygen -t rsa
ot@linux-server2 .ssh]#
[root@linux-server2 .ssh]# pwd
/root/.ssh
[root@linux-server2 .ssh]# ls
known_hosts linux-server2 linux-server2.pub
#private #public
2.将公钥拷⻉到远程服务器,让远程服务器对⾃⼰的公钥进⾏授权。执⾏以下命令:
ssh-copy-id username@remote_host
[root@linux-server2 .ssh]# ssh-copy-id -i /root/.ssh/linux-server2.pub
root@192.168.8.151
[root@linux-server1 .ssh]# pwd
/root/.ssh
[root@linux-server1 .ssh]# ls
authorized_keys
[root@linux-server1 .ssh]# more authorized_keys
其中username是远程服务器的⽤户名,remote_host是远程服务器的IP地址或域名。然后需要输⼊远程服务器的密码,将本地计算机的公钥添加到远程服务器的authorized_keys⽂件中。

3.使⽤linux-server2私有钥匙登录到linux服务器1 linux-server1
ssh -i 私钥路径 登录账户@登录地址
[root@linux-server2 .ssh]# ls
known_hosts linux-server2 linux-server2.pub
[root@linux-server2 .ssh]# ssh -i /root/.ssh/linux-server2 root@192.168.8.151

17.8 windows-SSH密钥优化

#在secureCRT中,创建连接时可以取消密码,选择密钥登录

17.9 SSH-远程访问免密登录

#server2
vim ~/.ssh/config
Host 登录地址
User 登录账户
IdentityFile 使⽤登录私钥
Host 192.168.8.151
User root
IdentityFile ~/.ssh/linux-server2

#server2
vim /etc/hosts
192.168.8.151 linux-server1 #表示本地域名解析

vim ~/.ssh/config
Host linux-server1
User root
IdentityFile ~/.ssh/linux-server2

[root@linux-server2 ~]# ssh root@linux-server1

17.10 SSH远程访问阶段总结

[root@linux-server1 .ssh]# pwd
/root/.ssh
[root@linux-server1 .ssh]# ls
authorized_keys
[root@linux-server2 .ssh]# pwd
/root/.ssh
[root@linux-server2 .ssh]# ls
config known_hosts linux-server2 linux-server2.pub

#known_hosts
作⽤:记录主机/服务器相关SSH钥匙指纹 ,作⽤⽤来进⾏安全提升
#authorized_keys
作⽤: 记录当前服务器授权的其他的服务器公钥信息,可以允许其他服务器使⽤私钥登录
#config
作⽤: 发起SSH登录,⾃动根据配置中的地址/账户查找对应私有钥匙,达到⾃动使⽤钥匙登录
#private key
作⽤:私有钥匙,进⾏授权登录匹配-和公钥匹配
#xxx.pub
作⽤:公有钥匙,进⾏授权登录匹配-和私钥匹配

17.11 SSH安全进阶01-首次登录

#SSH传输数据-密⽂传输
#密钥对加密/⾮对称加密
#⾮对称加密-公钥加密,私钥解密 | 私钥加密,公钥解密
#SSH⾮对称加密-公钥加密,私钥解密
#SSH服务器密钥对
/etc/ssh/ssh_host_ecdsa_key.pub # ecdsa-sha2-nistp256
#ECDSA(Elliptic Curve Digital Signature Algorithm)椭圆曲线加密算法
/etc/ssh/ssh_host_ed25519_key.pub #ssh-ed25519
#255位椭圆曲线加密算法,强于ecdsa
/etc/ssh/ssh_host_rsa_key.pub #ssh-rsa
#RSA 算法,弱于ecdsa

========
#指纹 - 将公钥进⾏哈希得到哈希值
哈希算法: MD5 - 128bit哈希值
SHA256 - 256bit哈希值
每个公钥都有唯⼀的⼀个MD5指纹,和唯⼀的⼀个SHA256指纹

===========
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ed25519_key.pub
获取指纹 算法 指定公钥⽂件
公告:
指纹 - 服务器 linux-server1
/etc/ssh/ssh_host_ecdsa_key.pub
256 MD5:92:30:41:00:1f:67:9f:35:d4:6f:86:93:86:95:04:f4 no comment (ECDSA)
256 SHA256:xg1dB3/QhLkY68eOK8WS96NCq5LIHfqhX8q53TQnfEs no comment (ECDSA)

/etc/ssh/ssh_host_ed25519_key.pub
256 MD5:16:34:0a:ee:72:1c:a7:b8:ca:5a:b0:bb:9c:8a:d4:28 no comment (ED25519)
256 SHA256:tHObplFxln1jTQqkTU0WoaWp7sDcllNlZGJ0HqHM5uE no comment (ED25519)

/etc/ssh/ssh_host_rsa_key.pub
2048 MD5:ed:c1:8a:76:67:84:51:13:37:28:c7:7d:24:4c:8f:38 no comment (RSA)
2048 SHA256:xY5pK+SH+Oz1ZH7dUEiPDylxJ74Fn3qoEUpOF4jwVwc no comment (RSA)

===========

[root@linux-server2 .ssh]# ssh root@192.168.8.151
The authenticity of host ‘192.168.8.151 (192.168.8.151)’ can’t be established.
ECDSA key fingerprint is SHA256:xg1dB3/QhLkY68eOK8WS96NCq5LIHfqhX8q53TQnfEs.
ECDSA key fingerprint is MD5:92:30:41:00:1f:67:9f:35:d4:6f:86:93:86:95:04:f4.
Are you sure you want to continue connecting (yes/no)? yes #是否接受需要人工确认,上面公钥是否对
== ==========
[root@linux-server2 .ssh]# more ~/.ssh/known_hosts
192.168.8.151 ecdsa-sha2-nistp256
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBsSBveZPzh/tDv4RZXDO0dwbch3
DZr4K3taoyE+Vqv+4cAJI0j5isDL20OZZ8CBQ8o59bEsvMfWNUhZUh0SV+Q=
[root@linux-server1 ssh]# more /etc/ssh/ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBsSBveZPzh/tDv4RZXDO0dwbch3DZr4K3t
aoyE+Vqv+4cAJI0j5isDL20OZZ8CBQ8o59bEsvMfWNUhZUh0SV+Q=

root@192.168.8.151’s password:

在这里插入图片描述

17.12 SSH安全进阶02-非首次登录

在这里插入图片描述

17.13 SSH安全进阶03-防⽌中间⼈攻击

#中间⼈攻击防⽌
劫持SSH请求,发送假的公钥给⽤户,伪造服务器
防⽌⽅式: 1.⽐对正确的指纹,⽐对正确后写⼊公钥信息到~/.ssh/known-hosts
2.⼿动直接记录公钥在 ~/.ssh/known-hosts
#服务器重装系统,IP地址不变,钥匙变了 , 导致~/.ssh/known-hosts记录的公钥信息和重装系统之后的服务器公
钥不同
#中间⼈攻击提示 - 有可能是因为密钥太⽼/没有及时更新/IP地址对应服务器变化
#处理⽅法 :
1.删除 ~/.ssh/known-hosts
2.删除 ~/.ssh/known-hosts内对应地址的公钥

17.14 SSH安全进阶04-禁⽌root登录

#禁⽌root登录
修改 /etc/ssh/sshd_config -> SSH服务端配置⽂件
PermitRootLogin no
systemctl restart sshd.service
#只能使⽤普通账户登录

17.15 SSH安全进阶05-禁⽌密码登录

#禁⽌密码登录
ssh-copy-id -i ~/.ssh/linux-server2.pub tom@192.168.8.151 #上传公有钥匙到tom账户
ssh -i ~/.ssh/linux-server2 tom@192.168.8.151 #测试私钥是否可以登录tom账户
修改 /etc/ssh/sshd_config -> SSH服务端配置⽂件
PasswordAuthentication no
AuthorizedKeysFile .ssh/authorized_keys
systemctl restart sshd.service
#只能使⽤私钥登录
#只能使⽤普通账户使⽤私钥进⾏登录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值