本文主要是介绍sshd服务协议(包括超级详细的scp命令详解)不用给主机上锁类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
详细命令!!!
1.sshd服务协议说明
SSH 是 Secure Shell Protocol(安全外壳协议) 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
2、功能
SSH是专为远程登录会话和其他网络服务提供的安全性协议。 利用 SSH 协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业和操作系统普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。
SSH之所以能够保证安全,原因在于它采用了非对称加密技术(RSA)加密了所有传输的数据。
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接 收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。 服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用 SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的 好处就是传输的数据是经过压缩的,所以可以加快传输的速度。 SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。
3、验证
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙, 也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙 进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就 用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。
4、层次
SSH 主要由三部分组成:
传输层协议 [SSH-TRANS]
提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT]
将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
5、结构
服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。
启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了) 如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一 个子进程,该子进程进行这次的连接处理。
6、文件
- 下面提供一下平常企业中SSH服务配置参数
vim /etc/ssh/sshd_config
Port 52117 #SSH连接默认端口为22,为提高安全性改成0-1024以外的端口号(0-1024很多知名服务已经占用,用了有可能冲突)
PermitRootLogin no #禁止root用户远程登录,只能使用普通用户登录后切换到root
PermitEmptyPasswords no #禁止空密码登录
UseDNS no #不使用DNS域名解析.打开会导致连接慢,(在连接的时候会反向解析,根据IP地址解析出主机名,没有意义!)
GSSAPIAuthentication no #关闭GSSAPI认证,每次连接都会认证,在内网使用没必要打开次认证
7、实验
- 第一种级别(基于口令的安全验证)
(1)第一次链接陌生主机是要建立认证文件,所以会出现下图中的询问是否建立,输入yes后,输入远程主机的用户登录密码即可完成连接。
意思是,该远程主机的真实性无法确定,其公钥指纹为 SHA256:FFobshqrGOachj7Xp4LsJ9+xkNBlyyOe8ZIPl7K+qQI,确定想要继续连接吗?
输入yes即可。这时系统会提示远程主机被添加到已知主机列表。
命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。
我们可以通过 Ctrl+D 或者 exit 命令退出远程登录。
(2) 当再一次链接此台主机时,因为已经生成~/.ssh/know_hosts文件所以不需要再次输入yes
(3)scp 跨机远程拷贝
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。事实上,它在后台使用ssh连接来进行文件的传输。scp既指一种定义安全复制应该如何工作的协议,也指一种可以被安装的作为OpenSSH工具套的一部分的软件或是指令。
scp详细使用方法戳这里
scp命令参数
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
scp一般有六种使用方法
本地复制远程文件:(把远程的文件复制到本地)
scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz
远程复制本地文件:(把本地的文件复制到远程主机上)
scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz
本地复制远程目录:(把远程的目录复制到本地)
scp -r root@www.test.com:/val/test/ /val/test/
远程复制本地目录:(把本地的目录复制到远程主机上)
scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi
本地复制远程文件到指定目录:(把远程的文件复制到本地)
scp root@www.test.com:/val/test/test.tar.gz /val/test/
远程复制本地文件到指定目录:(把本地的文件复制到远程主机上)
scp /val/test.tar.gz root@www.test.com:/val/
(4)远程同步命令:rsync
rsync -r 同步目录
ps: scp复制文件时只指定服务器地址不加路径默认复制到哪里???
默认在该用户的根目录下。
- 第二种级别(基于密匙的安全验证)
1.sshd的key认证
(1)生成认证KEY
生成密钥id_rsa.(私钥),id_rsa.pub(公钥)
生成密钥的命令:ssh-keygen
三次回车:对密钥生成文件的默认存储
对空密码的确认
再次确认密码
(2)对主机上锁
命令:ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.100
authorized_keys 文件的出现表示加密(上锁)完成
(3)分发钥匙
命令:scp id_rsa root@172.25.254.200:/root/.ssh
服务端给客户端分发密钥后,客户端不再需要服务端的登陆密码,也能进入服务端
另外一种方法:
复制SSH密钥到目标主机,开启无密码SSH登录
ssh-copy-id user@host
目标主机中产生钥匙:
如果还没有密钥,请使用ssh-keygen命令生成。避免了以上复杂的上锁、分发钥匙的经历。
2.sshd的安全设定
若是服务端不希望客户端以密码认证的方式进入服务,设置/etc/ssh/sshd_config文件进行sshd安全设定,并重启服务。
PasswordAuthentication yes|no 是否允许用户通过登陆系统的密码做sshd的认证, 此时再进行远程登录,则只能用密钥进行登录,不能够以密码认证的方式进入服务
<1>若此时客户端把服务端的密钥丢失,则不能在进入服务。
<2>若在客户端没有丢失密钥的情况下,服务端不想让客户端进入服务,可以将“锁”丢弃,这样钥匙也就没有作用了。
<3>若在/etc/ssh/sshd_config文件下设定不允许root用户通过sshd服务,则客户端root用户连接服务端是会被拒绝
<4>Allowusers student westos ##设定用户白名单,白名单出现默认不再名单中的用户不能使用sshd
<5>Denyusers westos ##设定用户黑名单,黑名单出现默认不再名单中的用户可以使用sshd
这篇关于sshd服务协议(包括超级详细的scp命令详解)不用给主机上锁类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!