1. ssh概述 算法
ssh是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提供安全远程登陆及其它安全网络服务的协议。 shell
2. ssh 主要功能 vim
一个就是相似 telnet 的远程联机使用 shell 的服务器,即 ssh 安全
另外一个就是相似 FTP 服务的 sftp-server ,提供更安全的 FTP 服务 bash
3. ssh 工做原理 服务器
服务器创建公钥: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的文件,若系统刚刚安装完成时,因为没有这些公钥,所以 sshd 会主动去计算出这些须要的公钥,同时也会计算出服务器本身须要的私钥 网络
客户端主动联机请求: 若客户端想要联机到 ssh 服务器,则须要使用适当的客户端程序来联机,包括 ssh, putty 等客户端程序链接 架构
服务器传送公钥给客户端: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥传送给客户端使用 (此时应是明码传送,反正公钥原本就是给你们使用的) ssh
客户端记录并比对服务器的公钥数据及随机计算本身的公私钥: 若客户端第一次链接到此服务器,则会将服务器的公钥记录到客户端的用户家目录内的 ~/.ssh/known_hosts 。如果已经记录过该服务器的公钥,则客户端会去比对这次接收到的与以前的记录是否有差别。若接受此公钥, 则开始计算客户端本身的公私钥 tcp
回传客户端的公钥到服务器端: 用户将本身的公钥传送给服务器。此时服务器:具备服务器的私钥与客户端的公钥,而客户端则是: 具备服务器的公钥以及客户端本身的私钥,你会看到,在这次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不同,因此才称为非对称加密系统
开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用本身的私钥解密 (2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密,这样就能保证通讯安全
4. ssh 组成
(1). ssh 协议使用的是tcp 22号端口,telnet 使用的是tcp 的23号端口,ssh协议是C/S架构,分为服务器端与客户端。
(2). 服务器端的程序有 sshd
客户端的程序有,Windows下 putty,SecureCRT,SSHSSH Secure Shell Client …… Linux下有,ssh
5. ssh 工具实现
OpenSSH 包括sshd主程序与ssh客户端
6. sshd 配置文件详解
vim /etc/ssh/sshd_config
#1. SSH Server 全局设定,port ,协议 ……
# Port 22 #默认端口,也可使用多个端口
Protocol 2 #协议版本号
# ListenAddress 0.0.0.0 #默认值是监听全部接口的 SSH 要求
# PidFile /var/run/sshd.pid #放置 SSHD 这个 PID 的文件
# LoginGraceTime 2m #2分钟以内不输入密码,自动断开
# Compression delayed #使用压缩数据模式进行传输,登入后才将数据压缩 (delayed)
#2. 主要私有Key 存放文件
# HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥
# HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥
# HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥
#3. 关于登陆文件的数据与daemon的名称
SyslogFacility AUTHPRIV #记录日志/var/log/secure
# LogLevel INFO #日志等级
#4. 安全设置
# PermitRootLogin yes #是否容许 root 登入
# StrictModes yes #是否让 sshd 去检查用户家目录或相关文件的权限数据
# PubkeyAuthentication yes #使用密钥登陆系统
# AuthorizedKeysFile .ssh/authorized_keys #用户登陆公钥存放位置
PasswordAuthentication yes #登陆密码认证
# PermitEmptyPasswords no #否容许以空的密码登入
# RhostsAuthentication no #系统不使用 .rhosts认证
# IgnoreRhosts yes #是否取消使用 ~/.ssh/.rhosts 来作为认证
# RhostsRSAAuthentication no #专门给 version 1 用的,使用 rhosts 文件在 /etc/hosts.equiv
# HostbasedAuthentication no #上面的项目相似,不过是给 version 2 使用的
# IgnoreUserKnownHosts no #是否忽略家目录内的 ~/.ssh/known_hosts
ChallengeResponseAuthentication no #容许任何的密码认证
UsePAM yes #利用 PAM 管理使用者认证,能够记录与管理
#5. 登陆后项目
# PrintMotd yes #登入后是否显示出一些信息
# PrintLastLog yes #显示上次登入的信息
# TCPKeepAlive yes #当达成联机后,服务器会一直传送 TCP 封包给客户端以判断对方式否一直存在联机
UsePrivilegeSeparation yes #是否权限较低的程序来提供用户操做
MaxStartups 10 #同时容许几个还没有登入的联机画面
DenyUsers * #设定受阻止的使用者名称
DenyUsers test #阻止用户
DenyGroups test #阻止组
#6. SFTP 设定
Subsystem sftp /usr/lib/ssh/sftp-server
# UseDNS yes #为了要判断客户端来源是正常合法的,所以会使用 DNS 去反查客户端的主机名,不过在内网这项目设定为 no 会让联机达成速度比较快
7. sftp 讲解
(1). 使用方式:sftp root@localhost
(2). sftp 支持的命令
针对远程服务器主机 (Server) 的行为
变换目录到 /etc/test 或其余目录
cd /etc/test
cd PATH列出目前所在目录下的文件名
ls
dir创建目录
mkdir directory删除目录
rmdir directory显示目前所在的目录
pwd更改文件或目录群组
chgrp groupname PATH更改文件或目录拥有者
chown username PATH更改文件或目录的权限
chmod 644 PATH
其中,644 与权限有关创建连接文件
ln oldname newname删除文件或目录
rm PATH更改文件或目录名称
rename oldname newname离开远程主机
exit (or) bye (or) quit针对本机 (Client) 的行为(都加上 l, L 的小写 )
变换目录到本机的 PATH 当中
lcd PATH列出目前本机所在目录下的文件名
lls在本机创建目录
lmkdir显示目前所在的本机目录
lpwd针对资料上传/下载的操做
将文件由本机上传到远程主机 put [本机目录或文件] [远程]
put [本机目录或文件]
若是是这种格式,则文件会放置到目前远程主机的目录下将文件由远程主机下载回来 get [远程主机目录或文件] [本机]
get [远程主机目录或文件]
如果这种格式,则文件会放置在目前本机所在的目录当中!可使用通配符,例如:
get *
get *.rpm
8. 远程文件直接复制 scp
1
2
|
scp [-pr] [-l 速率] file [帐号@]主机:目录名 #上传
scp [-pr] [-l 速率] [帐号@]主机:file 目录名 #下载
|
选项与参数:
1
2
3
|
-p :保留原来文件的权限数据
-r :复制来源为目录时,能够复制整个目录 (含子目录)
-l :能够限制传输的速度,单位为 Kbits/s ,例如 [-l 800] 表明传输速限 100Kbytes/s
|
案例:
12 scp /etc/hosts* root @127.0.0.1 :~ #上传scp root@127.0.0.1:/etc/bashrc /tmp #下载
9. ssh的认证方式
基于口令的认证:这个就不用说了,就是输入用户名和密码
基于密钥的认证,具体步骤以下
(1).客户端创建两把钥匙(公钥与私钥)
123456 ssh-keygen [-t rsa|dsa] #可选 rsa 或 dsa[root@localhost ~]# ssh-keygen #默认算法[root@localhost ~]# ls -l .ssh/total 8-rw------- 1 root root 1675 May 27 03:05 id_rsa-rw-r--r-- 1 root root 408 May 27 03:05 id_rsa.pub(2).将公钥数据上传到服务器上
scp ~/.ssh/id_rsa.pub root@192.168.1.254:~ #上传到 root 的家目录底下便可
(3).将公钥放置服务器端的正确目录与文件名(scp 或 ssh-copy-id)
方法一 scp
创建 ~/.ssh 文件,注意权限须要为 700
mkdir .ssh ; chmod 700 .ssh #权限设定中,务必是 700 且属于使用者本人的帐号与群组才行
将公钥内的数据使用 cat 转存到 authorized_keys 内
cat id_rsa.pub >> .ssh/authorized_keys
chmod 644 .ssh/authorized_keys #这个档案的权限设定中,就得要是 644 才能够
方法二 ssh-copy-id
命令格式:ssh-copy-id –i /path/to/pubkey USERNAME@ERMOTE_HOST
案例:
ssh-copy-id –i .ssh/id_rsa.pub root@192.168.1.254
10. sshd 管理细则
密码应该常常换且足够复杂
非默认端口登陆
限制登陆用户地址
禁止管理员直接登陆
仅容许有限制用户登陆
使用基于密钥的认证禁止使用版本1
禁止使用版本1