1 关于SSH
SSH,security shell,安全外壳,用于远程连接。在SSH之前一直使用Telnet进行远程连接,端口为 TCP 23,但由于用Telnet进行数据传输时是明文传输,因此采用加密传输的SSH,端口为 TCP 22,SSH也是基于C/S架构的。
2 SSH的两种登录方式
1)基于口令的登录方式。
客户端向服务器的22号端口发起连接请求,服务器端向客户端发送一个公钥,客户端使用该公钥对用户名和密码进行加密后传输至服务器,服务器使用公钥对应的私钥进行解密,对比用户名和密码,通过后即可登录。
注:公钥用于对数据加密,私钥用于对加密的数据进行解密。客户端没有办法验证服务器,接受了公钥就代表通过验证。
2)基于秘钥方式登录。(很重要)
在客户端生成一对秘钥对(公钥和私钥),将公钥发送至服务器端;服务器端使用收到的公钥加密一串随机产生的字符并发送给客户端;客户端接收到加密后的数据时,使用私钥进行解密,并将解密后的结果发送给服务器端;服务器端对接收的数据与加密前的数据进行对比,对比成功后,客户端即可登录。
也就是说用不着用户密码,只需要用户名就能到登录。
3 配置SSH服务
3.1 配置服务器端
注:如果安装了centos7的基础设施服务器,SSH相关软件已经安装,查看用yum list | grep ssh。查到后会发现@后面是anaconda,这就是代表安装系统时已经安装。如,ssh的相关软件(openssh openssh-clients openssh-server)都在安装系统时安装好了
1)随系统安装好的软件 openssh openssh-clients openssh-server
2)启动服务 系统默认ssh服务已经开启,且是开机自启状态
3.2 配置客户端
1)随系统安装好的软件 openssh openssh-clients openssh-server
2)在客户端使用ssh连接服务器端
ssh 用户名@服务器的IP/服务器的主机名(前提是主机名能被解析)
注:默认登录方式为基于口令的登录方式。登录成功后就是已经远程连接了,在客户端操作和在服务器操作时一样的。退出用exit。来自服务器端的公钥文件保存在 /.ssh/known_hosts 。
4 限制用户登录
4.1 允许某用户使用SSH登录
1)在服务器端
第一步 编辑配置文件 vim /etc/ssh/sshd_config ,在末尾追加 allowusers 用户名
例: allowusers aa
第二步 重启服务 systemctl restart sshd
注:ssh目录下有带.pub结尾的,有.key结尾的,这样的都是成对的;
ssh中的文件用ll –h查看后发现有的文件大小是0,这样就不能登录ssh,需要重新安装ssh的那3个软件——openssh openssh-clients openssh-server
2)在客户端测试
注:只有被允许的用户可以登录,其他用户包括root,都不能登录
3)允许多个用户登录,编辑配置文件/etc/ssh/sshd_config时,allowusers后面的用户名用空格隔开即可 allowusers 用户名1 用户名2 用户名3
4.2 配置文件的解读(了解)
设置SSH服务监听的端口号 Port 22
设置使用的SSH协议的顺序 Protocol 2,1
设置SSH服务器绑定的IP地址 ListenAddress 0.0.0.0
是否允许root登录(建议不允许) PermitRootLogin no
设置是否允许空密码用户登录 PermitEmptyPasswords no
设置是否使用口令认证方式 PasswordAuthentication yes
是否允许用户使用ssh子系统 Subsystem /usr/local/sbin/sftpd
不允许root在没有秘钥的主机上登录 PermitRootLogin without-password
4.3 允许用户从指定的客户端登录
1)在服务器端
第一步 编辑配置文件 vim /etc/ssh/sshd_config ,在文件末尾追加:
allowusers 用户名@客户端IP/客户端主机名
例: allowusers aa@192.168.3.2
第二步 重启服务 systemctl restart sshd
2)客户端测试
只允许指定用户从指定客户端登录,其他用户均无法登录
4.4 禁止用户登录
1)在服务器端
第一步 编辑配置文件 vim /etc/ssh/sshd_config ,在文件末尾追加:
denyusers 用户名
例: denyusers aa
注:禁止多个用户登录则在文件末尾追加 denyusers 用户名1 用户名2 即用户名用空格隔开
第二步 重启服务 systemctl restart sshd
2)客户端测试
只有被禁止的用户不可以登录,其他用户都能登录。
4.5 通过/etc/hosts.allow 和 / etc/hosts.deny 控制客户端通过ssh连接服务器
1)编辑文件/etc/hosts.deny,没有的话就新建一个:vim /etc/hosts.deny ,写入
sshd:All //表示所有客户端均无法通过ssh协议连接服务器
2)编辑文件/etc/hosts.allow,没有的话就新建一个:vim /etc/hosts.allow ,写入
sshd:192.168.3.2 //只允许192.168.3.2的客户端通过ssh连接到服务器
4.6 基于秘钥的方式登录服务器
第一步 在客户端生成秘钥对: ssh-keygen //gen是generate
注:生成的秘钥默认保存的位置为~/.ssh目录下,公钥为id_rsa.pub,私钥为id.rsa。rsa是加密的算法
第二步 将客户端生成的公钥上传到服务器:
ssh-copy-id 用户名@服务器IP/服务器主机名
例1: ssh-copy-id 192.168.1.1 //默认用户名是root
例2: ssh-copy-id aa@192.168.1.1 //将秘钥copy给了aa用户
注:想以哪个用户身份登录就将秘钥copy给哪个用户;服务器端将客户端发来的公钥保存在 ~/.ssh/authorized_keys 中
第三步 在客户端登录服务器: ssh 用户名@服务器IP/服务器主机名
例1: ssh 192.168.1.1 //直接就能登录,不用输入root密码
例2: ssh aa@192.168.1.1 //以aa身份登录,不用输入aa的密码
5 SSH子系统
1)sftp 远程文件传输
功能:将本地/远程文件上传或许下载至远程/本地
登录方式: sftp 用户名@服务器IP/主机名
使用方式:与ftp的类似。
2)scp 远程复制(经常用)
将远程主机上的文件复制到本机: scp 用户名@主机名/IP:主机上文件路径 本地目录
将本地文件复制到远程主机: scp 本地文件路径 用户名@主机名/IP:目录
例1:# scp root@192.168.1.1:/root/f1 /root
// 将 root@192.168.1.1上的/root/f1 复制到本机 /root下
例2:# scp /root/f2 root@192.168.1.1:/root
// 将 本地 /root下的f2上传到 192.168.1.1的 /root
注:如果复制整个目录用 –r 参数。sftp 与scp均依赖SSH协议,也就是说SSH服务必须开启才能使用这两个命令。基于SSH的相关软件secureCRT,WinSCP等。工作中经常使用。
转载请注明出处,谢谢!