一、SSH远程终端连接工具
1、SSH简介
SSH是一种网络协议,用于计算机之间的加密登录。最早的时候,互联网通信都是明 文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH 协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获 得推广,目前已经成为Linux系统的标准配置。
2、SSH登录原理
也就是客户端先向服务端发送登录请求;客户端收到请求后发送自己的公钥;客户端收到公钥后将所有登录信息加密后传送到服务端进行登录;服务端此时已经收到请求了,它需要客户端使用私钥解密登录信息,确定是用户本人,验证成功后才允许登录成功。
3、SSH结构
SSH服务由服务端软件OpenSSH(openssl)和客户端(常见的有SSH);
SecureCRT,Putty,xshell组成,SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本,分别是1.x和2.x
下面我们看下服务端上的ssh相关软件。
[root@keepalived-master ~]# rpm -qa | egrep "openss*"
openssl-libs-1.0.2k-21.el7_9.x86_64
openssl-1.0.2k-21.el7_9.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64
openssl-devel-1.0.2k-21.el7_9.x86_64
OpenSSH同时支持SSH1.x和2.x。用SSH 2.x的客户端程序不能连接到SSH 1.x的 服务程序上。
SSH服务端是一个守护进程(daemon),它在后台运行并响应来自客户端的连 接请求。SSH服务端的进程名为sshd,负责实时监听远程SSH客户端的连接请 求,并进行处理,一般包括公共密钥认证,密钥交换,对称密钥加密和非安全连 接等。这个SSH服务就是我们前面基础系统优化中保留开机自启动的服务之一。
ssh客户端包含ssh以及像scp(远程拷贝),slogin(远程登录),sftp(安全 FTP文件传输)等应用程序。
ssh的工作机制大致是本地的ssh客户端先发送一个连接请求到远程的ssh服务 端,服务端检查连接的客户端发送的数据包和IP地址,如果确认合法,就会发送 密钥发回给客户端,自此连接建立。
一般来说,每个用户都会在对应的家目录下生成一个 .ssh 文件夹,如 tinychen 用 户则为/home/tinychen/.ssh ,而 root 用户则为 /root/.ssh 。如果是手动创建 的 .ssh 文件夹,还需要注意权限问题。一般来说 .ssh 文件夹的权限为700,私钥为 600,公钥为644。
[root@NAT1 ~]# ls -lA | grep ssh
-rw-------. 1 root root 35 Dec 16 17:38 .lesshst
drwx------. 2 root root 25 Dec 2 09:35 .ssh
[root@NAT1 ~]# cd .ssh
[root@NAT1 .ssh]# ls -l
total 4
-rw-r--r--. 1 root root 354 Dec 14 21:33 known_hosts
二、SSH基本用法
1、语法 :
ssh -p 22 user@host
2、参数:
-p:指定端口号。
user:登录的用户名。
host:登录的主机。
默认的端口号为22,当端口号为22的时候,可以省略-p 22,直接使用如下方式:
ssh user@host
# “@”:前边为用户名,如果用当前用户连接,可以不指定用户名
# “@”:后面为要连接的服务器的IP
此外,如果本地正在使用的用户名与远程登录的用户名一致,登录用户名也是可以省略的,即如下:
ssh host
3、举例:
我们登录一个普通用户tom:
也就是我在A上使用普通用户tom登录了,如果我要在A上登录B上的普通用户tom,则可以直接输入IP号;但我要是在A上使用普通用户tom登录了,我要在A上登录B上的超级用户root,则要输入用户名@IP号。
当第一次SSH连接的时候,本地会产生一个密钥文件~/.ssh/known_hosts(多个密 钥)
第一次远程登录,会出现高亮显示部分,因为要将密钥添加到本地的密钥文件中;
第二次远程登录,就不会出现高亮显示部分,因为密钥已经存在中;
如果连接不上,报错字符串对应的可能问题:
1,no route to host 可能为防火墙影响
2,Connection refused可能为防火墙,Connection refused 还可能是连接的对端 服务没开或者端口改变了。
三、ssh服务认证类型
1、基于口令认证
基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐 号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。
2、基于密钥认证
优点:不用输入密码,也就是免密登录
首先在客户端生成一对密钥 ;使用默认算法则不需要加-t
将客户端的公钥传到服务器端
测试
四、ssh服务常见配置
SSH服务的配置文件为/etc/ssh/sshd_config
1、修改默认端口
通过看配置文件发现ssh服务的默认端口是22,很多时候我们的服务器被不是被人针 对了,而是对方在扫一个网段中开启22端口的机器,你的机器密码又是很简单的 111111之类的,你不被黑谁被黑,所以我们要把默认端口改了,这样就不容易被人 扫出来恶意了。
步骤:
①修改配置并重启服务
将端口改为2201
②使用22端口连接
显示连接拒绝
③使用2201端口进行连接
显示可以连接
我们把默认端口改为2201,修改端口后要记得重启服务systemctl restart sshd;
(注意改的这个端口一定不能占用别的服务的默认端口,以免别的服务启动不起来)
注意:
如果按以上步骤不能使用新端口进行连接,可能是没有关防火墙和selinux服务;
2、禁止root登录
root在我们系统中是一个特殊的存在,他是系统管理员,也就意味着他在系统中可以 为所欲为,所以它也是我们要特别关注的对象,我们可以在一般操作中用普通用户操 作,在有需要修改一些系统设置的时候再从普通用户切换到root用户,这样可以最大 限度的避免因为误操作而对系统造成破坏,同时也可以避免黑客使用root用户名来暴 力破解密码登录系统。
步骤:
①进入文件改配
将yes改为no
②改完重启服务
③查看效果
root用户权限被拒绝
登录普通用户:
登录成功;
3、限制ssh监听的IP
这个适用于服务器有多个IP,这样我们就可以只监听内网IP,这样就只能用在同一个 局域网的机器去连接,而我们只需要让在同一个服务器的另一台机器监听在外网,这 样就可以实现在外网也访问服务器了,方法如下:
步骤:
①添加一个内网网卡,并重启虚拟机;
ip a查看,多了一个内外网卡:
①修改配置并重启服务
仅限192.168.91.140去连接ssh
③退出外网ip
退出外网ip重新用外网ip连,发现连接不上;
因为之前是通过外网ip192.168.42.28连的,现在将监听ip改成了内外192.168.91.140,所以外网ip已经连不上了;
使用内网ip连接:
4、禁止使用密码登录
在前面我们说过使用key认证登录的,这是一种比较安全的登录方式,所以为了提高 安全性我们可以通过这种方式来登录服务器,再禁止使用密码登录使用key认证登录 我已经说过了,在这里就说下如何禁止使用密码登录,也只需要修改一下配置文件就 可以了,如下:
步骤 :
①修改配置并重启服务
这个时候我们是无法用密码登录系统的
而我们需要传公钥就得要密码这是很矛盾的,所以需要我们提前把公钥传给服务器, 或者临时开启密码登录,然后就能实现登录了
五、常见配置总结
1、常见的SSH服务器监听的选项如下:
1 Port 22 //监听的端口号为22
2 Protocol 2 //使用SSH V2协议
3 ListenAdderss 0.0.0.0 //监听的地址为所有的地址
4 UserDNS no //禁止DNS反向解析 建议用no,不需要对DNS进行反向解
析,可以加快ssh连接速度。
2、常见用户登录控制选项如下 :
PermitRootLogin no // 禁止root用户登录
PermitEmptyPasswords no // 禁止空密码用户登录 一旦启用了
PermitEmptyPasswords yes,那么所有无密码的用户也就可以远程登录了,并且还是
免密码的方式。
LoginGraceTime 2m // 登录验证时间为2分钟
MaxAuthTries 6 // 最大重试次数6次
AllowUsers steven // 只允许steven用户登录
DenyUsers steven // 不允许登录用户 steven
MaxSessions // 最大终端会话个数
3、常见登录验证方式如下:
1 PasswordAuthentication yes //启用密码验证
2 PubkeyAuthentication yes //启用密匙验证
3 AuthorsizedKeysFile .ssh/authorized_keys //指定公钥数据库文件
六、ssh客户端附带的远程拷贝scp命令
scp基本语法:scp -secure copy
每次都是全量拷贝,增量拷贝用rsync
#推:PUSH
scp -P22 -r -p /tmp/chensiqi root@172.16.1.41:/tmp
#拉:PULL
scp -P22 -rp root@172.16.1.41:/tmp/chensiqi /opt/
scp为远程拷贝文件或目录的命令
-P(大写):接端口,默认22
-r:递归,表示拷贝目录
-p:表示在拷贝前后保持文件或目录属性
-l limit:限制速度
举例:
PUSH将文件拷给别人
PULL从别人那拷走文件
scp知识小结
1,scp是加密的远程拷贝,而cp仅为本地拷贝
2,可以把数据从一台机器推送到另一台机器,也可以从其他服务器把数据拉回到本 地执行命令的服务器
3,每次都是全量完整拷贝,因此,效率不高,适合第一次拷贝用,如果需要增量拷 贝,用rsync
4、一定要加文件存放路径
七、知识小结
1)SSH是安全的加密协议,用于远程连接Linux服务器。
2)SSH默认端口是22,安全协议版本SSH2,除了2之外还有SSH1(有漏洞).
3)SSH服务端主要包含两个服务功能SSH远程连接和SFTP服务。
4)Linux SSH 客户端包含ssh远程连接命令,以及远程拷贝scp命令等。