SSH远程登陆管理
文章目录
ssh基本概述
SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输,确保了数据传输安全,那ssh服务主要功能有哪些呢?
1.提供远程连接服务器的服务;
2.对传输的数据进行加密
SSH与telnet
那么除了SSH协议能提供远程连接服务,Telnet也能提供远程连接服务,那么分别是什么呢?
ssh服务会对传输数据进行加密,监听在本地22/tcp端口,ssh服务默认支持root用户登录;
Telnet服务不对数据进行加密,监听在本地23/tcp端口,Telnet默认不支持root用户登录;
协议 | 端口 |
---|---|
ftp | tcp/20 tcp/21 |
ssh | tcp/22 |
telnet | tcp/23 |
http | tcp/80 |
https | tcp/443 |
dns | tcp/53 udp/53 |
mysql | 3306 |
rdp | 3389 |
rpc | 111 |
redis | 6379 |
smtp | 25 |
安装telnet服务并运行
[root@web01 ~]# yum install -y telnet-server
[root@web01 ~]# systemctl start telnet.socket
使用wireshark检测vmnet8网卡上telnet的流量
使用wireshark检测vmnet8网卡上telnet的流量
telnet无法使用root用户登录linux 系统,需要创建普通用户
[root@web01 ~]# useradd lcc
[root@web01 ~]# echo '1' | passwd --stdin lcc
Changing password for user lcc.
passwd: all authentication tokens updated successfully.
- 1
- 2
- 3
- 4
使用普通用户进行telnet登录
搜索wireshark 包含telnet相关流量
分析ssh流量
SSH相关命令
SSH有客户端与服务端,我们将这种模式成为C/S架构,ssh客户端支持Windows、Linux、Mac等平台;
在ssh客户端中包含ssh\slogin远程登录、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。
ssh远程登录服务器命令示例
[root@web01 ~]# ssh -p22 root@10.0.0.41
root@10.0.0.41's password:
Last login: Fri Jul 26 10:53:10 2019 from 10.0.0.7
[root@backup ~]#
-p 指定连接远程主机的端口,默认22端口可省略
root@10.0.0.41
“@”前面为用户,如果当前用户连接可以不指定用户
“@”后面为要连接的服务器ip
scp复制数据至远程主机命令(全量复制)
scp 与 rsync远程传输方式类似
覆盖式 增量
-P 指定端口,默认22端口可不写
-r 表示递归拷贝目录
-p 表示在拷贝文件前后保持文件或目录属性不变
-l 限制传输使用带宽(默认kb) /8 ->KB /1024 ->MB
#拉、下载:将远程172.16.1.31服务器/etc/exports文件拉取到本地/data目录
[root@web01 data]# scp -P22 -rp root@172.16.1.31:/etc/exports /data/
root@172.16.1.31’s password:
exports 100% 64 41.0KB/s 00:00
[root@web01 data]#
#推、上传:将本地/data/exports文件推送至远程服务器172.16.1.31的/data目录
[root@web01 data]# scp -P22 -rp /data/exports root@172.16.1.31:/data/
root@172.16.1.31’s password:
exports 100% 64 28.6KB/s 00:00
[root@web01 data]#
#限速
[root@web01 data]# dd if=/dev/zero of=/data/1.txt bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 3.16385 s, 166 MB/s
[root@web01 data]# ll -h /data/
total 501M
-rw-r–r-- 1 root root 500M Jul 26 14:23 1.txt
-rw-r–r-- 1 root root 64 Jul 23 17:01 exports
[root@web01 data]# scp /data/1.txt root@172.16.1.31:/tmp
root@172.16.1.31’s password:
1.txt 91% 455MB 53.2MB/s 00:00 E1.txt 100% 500MB 50.0MB/s 00:10
[root@web01 data]#
#限速为8096,换算为MB,8096/8=1024k=1M
[root@web01 data]# scp -l 8096 /data/1.txt root@172.16.1.31:/tmp
root@172.16.1.31’s password:
1.txt 13% 68MB 1.0MB/s 07:14 ETA
[root@web01 data]#
1.scp通过ssh协议加密方式进行文件或目录拷贝 2.scp连接时的用户作为拷贝文件或目录的权限 3.scp支持数据推送和拉取,每次都是全量拷贝,效率较低
Sftp远程数据传输命令
-1:指定使用协议版本1。
-C:启用压缩。
-v:提高登录水平(打印更多的debug信息)。
-B:指定sftp传输使用的缓存大小,默认值为32768bytes。
-b:通过指定脚本,调用脚本命令,而不是在shell命令行输入命令。
-F:设定一个可变动的用户配置给ssh.这个选项直接会被传递到ssh(1),如[root@localhost tmp]# sftp -F /tmp/test root@192.168.1.222
-o:指定配置信息,如[root@localhost /]# sftp -o Port=22 root@192.168.1.222
-P:Connect directly to a local sftp server (rather than via ssh(1)). This option may be useful in debugging the client and server.
-R:指定同一时刻有多少请求,默认为64。增加该参数可以轻微的提高传输速度,不过会占用更多的内存。
-S:指定用于加密连接的程序,如ssh。
-s:subsystem | sftp_server
sftp [user@]host[:dir[/]]:默认情况下登录到远程的/root目录。指定目录的话,如/opt,则登录到远程/opt目录
例如:
[root@localhost /]# sftp root@192.168.1.222:/opt
sftp [user@]host[:file ...]:直接下载远程文件到本地
例如:
[root@localhost /]# sftp root@192.168.1.222:/opt/testfile.txt
默认可以通过sftp命令连接sftp服务 [root@web01 data]# sftp root@10.0.0.31 root@10.0.0.31's password: Connected to 10.0.0.31. sftp> 查看本台服务器路径(命令前加l) [root@web01 data]# sftp root@10.0.0.31 root@10.0.0.31's password: Connected to 10.0.0.31. sftp> sftp> lpwd Local working directory: /data sftp> lls sftp> 查看远程服务器路径[默认用户家目录] [root@web01 data]# sftp root@10.0.0.31 root@10.0.0.31's password: Connected to 10.0.0.31. sftp> sftp> pwd Remote working directory: /data sftp> ls exports sftp> sftp使用get下载文件至本地服务器 格式为:get 远程机器路径 当前机器路径 sftp> get /data/exports /data/ Fetching /data/exports to /data/exports /data/exports 100% 64 8.5KB/s 00:00 sftp> lls exports sftp> sftp使用put上传文件至远程服务器 格式为:put 当前机器路径 远程机器路径 sftp> put /data/put.txt /data/ Uploading /data/put.txt to /data/put.txt /data/put.txt 100% 0 0.0KB/s 00:00 sftp> ls exports put.txt sftp>
SSH验证方式
基于账号密码远程登录
[root@web01 ~]# ssh root@172.16.1.61 The authenticity of host '172.16.1.61 (172.16.1.61)' can't be established. ECDSA key fingerprint is SHA256:5BsWOqUTowAsb7pKpfPSX3D/aENFyhCY/m2NJG9Q3Bo. ECDSA key fingerprint is MD5:7b:4a:5f:92:07:9b:c4:c4:aa:65:9d:e2:68:11:f4:1d. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.16.1.61' (ECDSA) to the list of known hosts. root@172.16.1.61's password: Last login: Fri Jul 26 15:39:03 2019 from 10.0.0.1 [root@m01 ~]#
基于密钥远程登录
通过SSH协议,用户可以通过终端机访问和使用远程linux服务器,ssh的端口为22。但每次进行连接都要输入密码。如果管理几台到十几台集群,那可以应付的的过来。如果集群增加了几百,上千台。那么使用SSH管理起来就不方便了。
默认情况下,通过ssh客户端命令登录远程服务器,需要提供远程系统上的账号密码,但为了降低密码泄露的几率和提高登录的方便性,建议使用秘钥验证方式。
在服务器上生成非对称秘钥
# -t 指定秘钥类型 # -C 指定用户邮箱 [root@m01 ~]# ssh-keygen -C linhaoda0225@sina.com 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:nxa7encEsG4V6vNDcBB6qn5A3VunbGJRUCKBz231ZQE linhaoda0225@sina.com The key's randomart image is: +---[RSA 2048]----+ | .o.++.E...| | . oo.+ o| | +.o.B o o | | . +oO = o | | . S+.O + | | .. .O+= . | | .. o=* . | | . ....+ . | | ...o.. o | +----[SHA256]-----+ [root@m01 ~]# ll .ssh/ total 8 -rw------- 1 root root 1679 Jul 26 16:28 id_rsa -rw-r--r-- 1 root root 403 Jul 26 16:28 id_rsa.pub [root@m01 ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/gfWoiOd30VGftSp8YIqNqweUClvUI7dGw4Is/VxPdlndseoAFAsjVRDyQ84kdSgddy2vII0rjnWd1ILWOvMl7YJU2G1UO4hbhL9X14dq+XBibwQ/Chb2JDMJSMKRi1jVJyQPUgAnpYW2n5qIdmk0CVxLBo7HX53IO0j86WY6XsKMsA57UwpaH9oK9sXiH/SRhK6z/Y5FI9EVU35GCiDgHu6vk0uksIPwqE9e8Zw+S6xrYJ6RmHKYGwSNqRB1UKfIUQI3pQZz8ieyw7O9i5fzMNValL/U6j7LoGYNbJXvdL4IWVgHvgR7EqALC3pGTAeUiQ5YNGvgKm9yd3fA0C1f linhaoda0225@sina.com [root@m01 ~]#
将公钥推送到你需要连接的主机,第一次需要输入对端主机的密码
#命令示例: ssh-copy-id [-i [identity_file]] [user@]machine ssh-copy-id #命令 -i #指定下发公钥的路径 [user@] #以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥 machine #下发公钥至那台服务器, 填写远程主机IP地址 #分发秘钥,[将A服务器的公钥写入B服务器~/.ssh/authorized_keys文件中] [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
直接连接无需密码则表示密钥已配置成功
#远程登录对端主机方式 [root@m01 ~]# ssh root@172.16.1.41 [root@nfs ~]# #不登陆远程主机bash,但可在对端主机执行命令 [root@m01 ~]# ssh root@172.16.1.41 "hostname -i" 172.16.1.41
SSH场景实践
实践场景:用户通过Windows/Mac/Linux客户端连接跳板机免密登录,跳板机连接后无外网的Linux主机免密登录,架构图如下:
实践多用户登录一台服务器无密码